实体框架检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实体框架检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况相关的知识,希望对你有一定的参考价值。
我有实体User
与几个one-to-one
和many-to-many
关系和Identity primary key
,以及generic repository
,每个请求创建。
我有一个带有客户端和服务器验证的注册表单,我决定关闭客户端验证以测试服务器在这种情况下的行为方式。
我关闭了客户端验证来测试注册表单并输入一些无效的值,所以我回到表单说我有一些错误,在我修复后我得到了非常有趣的错误说:
_context.SaveChanges(); //towing the error below:
Conflicting changes detected. This may happen when trying to insert multiple entities with the same key
这对我来说很奇怪,因为我分离了实体User
,但当我发现这个How to clean-up an Entity Framework object context?所以相反只分离User
实体我决定尝试清理对象上下文完全运行该代码:
var objectStateEntries = this.objectContext
.ObjectStateManager
.GetObjectStateEntries(EntityState.Added);
foreach (var objectStateEntry in objectStateEntries)
{
if(objectStateEntry.Entity != null)
this.objectContext.Detach(objectStateEntry.Entity);
}
因此,所有工作良好,我没有得到Conflicting changes detected
错误,但我仍然想知道为什么会发生这种情况,可能有人可能会解释?
答案
你可以找到你的答案here:
context.ObjectStateManager.GetObjectStateEntries(System.Data.Entity.EntityState.Added| System.Data.Entity.EntityState.Unchanged);
以上是关于实体框架检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况的主要内容,如果未能解决你的问题,请参考以下文章