我想问一下这种错误。
已成功提交对数据库的更改,但更新对象上下文时发生错误。 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);
}
答案 0 :(得分:0)
我找到了解决方案。
发生了什么事,当我创建我的表时,我忘了添加主键并将(Is Identity)属性设置为yes。然后我创建了我的实体模型并得到了这个错误。
我回去修复了我的数据库表,但我仍然讨厌奇怪的异常。最终解决问题的方法是删除实体并在修复表后重新创建它。
没有例外:)