关于“角色的变化冲突”例外

时间:2010-05-16 07:45:47

标签: .net entity-framework

其实我得到了例外

  

检测到关系'DataModel.FK_TableName_RelateTableName'的角色'TableName'发生冲突的变化

从ObjectContext调用ApplyChanges方法时。我不知道这个例外是什么。我只是想知道这个例外的原因。

2 个答案:

答案 0 :(得分: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属性设置为TableNameId为1的对象 - 因此实体框架无法确定哪一个是放入数据库的正确关系。

答案 1 :(得分:0)

这个问题背后的实际原因是,当我们选择任何SaveChanges时,需要正确调度上下文,以便继续下一个SaveChanges,将另一条记录插入到具有不同外键的同一项目上的DB中。您只需在“context.SaveChanges()”

之后添加以下行

context.Entry(您的对象).State = System.Data.Entity.EntityState.Detached;

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