EntityFramework错误

时间:2017-04-05 08:01:42

标签: asp.net entity-framework linq

我想问一下这种错误。

  

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

当我们在将记录插入用户界面后立即手动删除后端(SQL)时发生错误。您可以在下面找到代码。

    public async Task<ActionResult> AddCustomer([DynamicJson] dynamic data)
    {
        var returnJson = new ReturnJsonModel { status = "ok" };
        dynamic ent = data.ent;
        var customerId = string.Empty;
        using (var dbContextTransaction = db.Database.BeginTransaction())
        {

             try
            {
                var customerEo = new ARCustomer();
                foreach (var field in ent)
                {
                    if (Enumerable.Contains(_signatoryKey, field.Key))
                        UploadSignatoryImage(field.Key, field.Value);

                    if (!Enumerable.Contains(_excludedKey, field.Key))
                        GenericExtensions.SetValue(customerEo, field.Key, field.Value);
                }

                //customerId = customerEo.CustomerID;
                customerEo.SetCreatedStamp();
                db.ARCustomers.Add(customerEo);
                await db.SaveChangesAsync();

                returnJson.request = new { customerEo.SeqID };
            }
            catch (DbEntityValidationException ex)
            {
                foreach (var eve in ex.EntityValidationErrors)
                {
                    returnJson.message = string.Format("Entity of type {0} in state {1} has the following validation errors: ",
                            eve.Entry.Entity.GetType().Name, eve.Entry.State);

                    foreach (var ve in eve.ValidationErrors)
                        returnJson.message = string.Format("Property {0}, Error: {1}", ve.PropertyName, ve.ErrorMessage);
                }
                throw;
            }
            catch (DbUpdateException ex)
            {
                returnJson.status = "error";
                returnJson.message = ex.InnerErrorMessage();
            }
            catch (SqlException ex)
            {
                returnJson.status = "error";
                returnJson.message = string.Format("{0} The sql errors are: {1}", ex.Message, ex.FullErrorMessage());
            }
            catch (Exception ex)
            {
                returnJson.status = "error";
                returnJson.message = ex.InnerErrorMessage();
            }

            if (!returnJson.status.Equals("error"))
            {
                SaveSignatories(customerId);


                if (!returnJson.status.Equals("error"))
                    dbContextTransaction.Commit();



            }
        }
        return Json(returnJson);
    }

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。

发生了什么事,当我创建我的表时,我忘了添加主键并将(Is Identity)属性设置为yes。然后我创建了我的实体模型并得到了这个错误。

我回去修复了我的数据库表,但我仍然讨厌奇怪的异常。最终解决问题的方法是删除实体并在修复表后重新创建它。

没有例外:)