2010-05-16 33 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;

这将解决冲突。多次插入相同的上下文会导致冲突。