繁体   English   中英

保存时实体框架中的对象状态不一致错误

[英]Inconsistent Object State Error In Entity Framework When Saving

我有以下代码来模拟一个主人,把他的狗卖给别人,然后给它起一个新的名字:

public void ChangeOwner(int oldOwnerID, int newOwnerID, int dogID, string newDogName)
{
    var oldOwner = _objectContext.People.FirstOrDefault(x => x.ID == oldOwnerID);
    oldOwner.DogID = null;

    var newOwner = _objectContext.People.FirstOrDefault(x => x.ID == newOwnerID);
    newOwner.DogID = dogID;

    var dog = _objectContext.Dogs.FirstOrDefault(x => x.ID == dogID);
    dog.Name = newDogName;

    _objectContext.SaveChanges();
}

此代码将引发以下错误:

附加信息:对数据库的更改已成功提交,但是更新对象上下文时发生错误。 ObjectContext可能处于不一致状态。 内部异常消息:AcceptChanges无法继续,因为对象的键值与ObjectStateManager中的另一个对象冲突。 在调用AcceptChanges之前,请确保键值是唯一的。

为什么会发生此错误,我该如何解决?

您能否查看表定义/创建并查看是否添加或分配了主键并将(Is Identity)属性设置为yes

如果之后出现错误,请删除该实体并重新创建它,这应该可以解决问题,但这听起来像是主键问题。

我本人就遇到了这个问题,上面的答案说的是“ PRIMARY KEY”问题是正确的,但是对于ASP.NET MVC来说,它是我的新手,我不知道该如何实施该解决方案。

因此,对于像我这样的ASP.NET MVC n00b谁想要看一些代码以及什么对我有用:

我的问题是我的MODEL中的KEY与SQL TABLE中的KEY不匹配。

例如。 我的主键位于表中的“ Event_Question_ID”上。 但是在我的MODEL中,它位于另一个字段EventID。

我所要做的就是将密钥移至我的模型中的正确字段

模型:

[Key]   
public int Event_Question_ID { get; set; }

注意: [Key]需要using System.ComponentModel.DataAnnotations;

我希望这可以帮助某个人!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM