【问题标题】:Inconsistent Object State Error In Entity Framework When Saving保存时实体框架中的对象状态不一致错误
【发布时间】:2012-03-06 03:08:21
【问题描述】:

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

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

为什么会出现这个错误,我可以做些什么来解决它?

【问题讨论】:

    标签: c# asp.net entity-framework


    【解决方案1】:

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

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

    【讨论】:

    • 我将所有主键设置为我的 EDMX 文件中的身份,因此我删除了问题实体并将其添加回来,现在它可以工作了。谢谢你的帮助!这是让它工作的最奇怪的方法!
    • 我知道,但好在我给了你一个非常快速的修复,我很高兴它真的对你有用。我花了 2 个小时试图让另一个 OP 做一些工作当他就我的建议与我抗争只是为了回去做我要求的事情并且它奏效了..LOL很高兴我能帮忙
    【解决方案2】:

    我自己也遇到过这个问题,上面的回答说这是 PRIMARY KEY 问题是完全正确的,但是作为 ASP.NET MVC 的新手,我并不确切知道如何实现该解决方案。

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

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

    例如。我的 PRIMARY KEY 在我的表中的“Event_Question_ID”上。但在我的 MODEL 中,它位于不同的字段 EventID。

    我所要做的就是将 KEY 移动到我的模型中的正确字段

    型号:

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

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

    我希望这对那里的人有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-30
      • 1970-01-01
      • 2014-11-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多