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

时间:2012-02-14 18:22:15

标签: c# asp.net entity-framework

我有以下代码来模拟卖给别人的狗主人和狗得到一个新名字:

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之前,请确保键值是唯一的。

为什么会出现此错误,我该怎么做才能修复它?

2 个答案:

答案 0 :(得分:4)

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

如果你之后得到一个错误...删除实体并重新创建它,这应该解决问题,但这听起来像一个主要的关键问题..

答案 1 :(得分:1)

我自己已经遇到了这个问题,上面的答案恰恰是说它是一个主要的关键问题,但作为ASP.NET MVC的新手,我并不知道如何实现解决方案。

那么,对于像我这样的ASP.NET MVC n00bs,我希望看到一些代码以及对我有用的东西:

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

EG。我的PRIMARY KEY在我的表中的'Event_Question_ID'上。但在我的模型中,它位于不同的领域,即EventID。

我所要做的就是将KEY移动到我的MODEL

中的正确字段

型号:

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

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

我希望这有助于那里的人!

相关问题