【问题标题】:Entity Framework 6.1 - The changes to the database were committed successfully, but an error occurred while updating the object contextEntity Framework 6.1 - 对数据库的更改已成功提交,但在更新对象上下文时发生错误
【发布时间】:2018-03-01 04:40:51
【问题描述】:

我在调用 DbContext.SaveChanges() 时遇到错误。

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

以下代码在调用 DbContext.SaveChanges() 时出现错误,即 for 循环。

if (ID == null || ID == 0)
        {

            Models.Employee obj = new Models.Employee();
            obj.NAME = Name;
            obj.ID = GetNextSequenceValue();
            var savedObj = DbContext.Employees.Add(obj);
            DbContext.SaveChanges(); // this SaveChanges executes successfully.
            savedId = savedObj.ID;
        }

        for (int i = 0; i < Parameters.Length; i++)
        {
            Models.EmployeeDetail obj = new Models.EmployeeDetail;
            obj.ID = Convert.ToInt32(savedId);
            obj.KEY = Parameters[i].Key;
            obj.VALUE = Parameters[i].Value;
            DbContext.EmployeeDetails.Add(obj);
        }
**// error code**
 DbContext.SaveChanges();

但是,当我将代码更改为以下代码时(请参阅 for 循环代码),它可以正常工作。但出于性能考虑,我在每次调用 for-loop 时都会访问 DB。

if (ID == null || ID == 0)
                {

                    Models.Employee obj = new Models.Employee();
                    obj.NAME = Name;
                    obj.ID = GetNextSequenceValue();
                    var savedObj = DbContext.Employees.Add(obj);
                    DbContext.SaveChanges();
                    savedId = savedObj.ID;
                }

                for (int i = 0; i < Parameters.Length; i++)
                {
                    Models.EmployeeDetail obj = new Models.EmployeeDetail;
                    obj.ID = Convert.ToInt32(savedId);
                    obj.KEY = Parameters[i].Key;
                    obj.VALUE = Parameters[i].Value;
                    DbContext.EmployeeDetails.Add(obj);
                    DbContext.SaveChanges();
                    DbContext.EmployeeDetails.Remove(obj);
                }

请建议我怎样才能使它正常工作。

【问题讨论】:

    标签: entity-framework-6


    【解决方案1】:

    查看模型结构与DB的映射后,发现模型结构不正确。问题在于模型没有键(主)定义。关联正确的键序列后,问题就解决了。

    希望这对正在研究类似问题的人有所帮助。

    【讨论】:

      【解决方案2】:

      分离实体的当前状态并更改下一个状态调用。在Savechanges()之后添加一行Detached代码:

      db.Entry(your entity).State = EntityState.Added;
      db.SaveChanges();
      db.Entry(your entity).State = EntityState.Detached;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-07-04
        • 2020-06-18
        • 2017-07-13
        • 1970-01-01
        • 2017-05-13
        相关资源
        最近更新 更多