2016-01-24 117 views
0

我想使用AddRange方法创建一个批量插入到我的数据库。EF6:AddRange抛出异常

这是我做的:

public virtual IEnumerable<E> InsertRange(IEnumerable<E> entities) 
    { 
     Context.Set<E>().AddRange(entities); 

     if (isAutoSave) 
      Context.SaveChanges(); 
    } 

当我打电话调用SaveChanges()我得到一个异常说:

Conflicting changes detected. This may happen when trying to insert multiple entities with the same key. 

我想问题可能是在我的模型。我的Id列是PK和Identity,它的类型为int,这会导致所有新实体的Id = 0。我能做些什么来解决这个问题?

感谢, 马坦

+0

你是怎么产生你显示的错误信息的? –

+0

我更新了我的文章 –

+0

如果它们是数据库中不存在的新对象,则每个对象的Id都应为零。这会通知Entity Framework这些对象是新的,并且在插入数据库时​​需要分配一个非零ID。我怀疑你的模型可能存在一个不同的问题。你能否提供你试图插入的对象类的代码? – Chase

回答

0

也许你可以尝试禁用EF跟踪 - 做你需要的,保存更改并启用了回去。这也会增加插入操作的性能。

所以,调用方法,将插入并保存更改之前只是补充一点:

context.Configuration.AutoDetectChangesEnabled = false; 

当你完成启用回:

context.Configuration.AutoDetectChangesEnabled = true; 

我希望这会帮助你。

+0

我已经在做这样的表现,我一直得到相同的错误 –

+0

你能提供更多的代码吗?你是否在每个实体类型或特定的实体类型上都获得了这个。如果它只涉及到一个实体类型,那么它可能是FK导致的错误,但无论如何,如果你提供更多的代码,它更容易理解实际发生的事情。 – hellwd

+0

我还没有试图用更多的实体类型来做它,如这是我第一次需要这样做。无论如何,代码来自我创建的通用DAL存储库,我将尽快提供更多代码 –