实体框架检测到冲突的更改。尝试使用相同的密钥插入多个实体时可能会发生这种情况

问题描述 投票:5回答:1

我有实体User与几个one-to-onemany-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错误,但我仍然想知道为什么会发生这种情况,可能有人可能会解释?

asp.net-mvc-3 entity-framework-4
1个回答
0
投票

你可以找到你的答案here

context.ObjectStateManager.GetObjectStateEntries(System.Data.Entity.EntityState.Added| System.Data.Entity.EntityState.Unchanged);
© www.soinside.com 2019 - 2024. All rights reserved.