2010-05-16 83 views
9

其實我得到一個異常關於「衝突更改角色」異常

爲「DataModel.FK_TableName_RelateTableName」檢測

關係中的作用「表名」衝突的更改時ApplyChanges方法從ObjectContext調用。我不知道這個例外是什麼。我只是想知道這個例外的原因。

+1

我面臨着同樣的問題,這篇文章有解決方案只是給它一個想法http://social.msdn.microsoft.com/Forums/en/adonetefx/thread/5fa9dbb9-9b4a-43dc-bfa0-e1680d8f6ed0 – MegaMind 2012-07-12 12:24:48

回答

8

我想你會得到這些例外,如果你想獲得同一個實體的外鍵關係兩次。一個簡單的例子是這樣的:

var tn = ctx.TableName.Where(t => t.TableNameId == 1).First(); 
var rel = new RelateTableName {TableName = tn, TableNameId = 2}; 
ctx.RelateTableName.AddObject(rel); 

在這裏你可以看到我的TableNameId屬性設置爲2,但TableName屬性與1 TableNameId的對象 - 這樣的實體框架不能找出哪一個是正確的關係放入數據庫。

+3

我@ kmp的答案是現貨。我遇到了同樣的例外情況,經過一番Google搜索後,在該主題上發現了一篇相當不錯的博文:http://coding.abel.nu/2012/03/ef-code-first-navigation-properties-and-foreign-keys / – jstromwick 2012-06-07 20:40:32

0

這個問題背後的真正原因是,當我們進行任何SaveChange時,上下文需要正確調度,以便繼續使用下一個SaveChanges將另一條記錄插入到具有不同外鍵的同一項目中的數據庫中。你只需要後添加以下行 「context.SaveChanges()」

context.Entry(你的對象).STATE = System.Data.Entity.EntityState.Detached;

這將解決衝突。多次插入相同的上下文會導致衝突。