2016-01-24 67 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存儲庫,我將盡快提供更多代碼 –