我在通过导航器向引用中添加一个新实体时,对实体框架4遇到了问题。请看一下代码:
ControlPolicy cp1 = new ControlPolicy()
{
ControlPolicyLevelType = 2, //full access to NA
MemberState = context.Countries.First(tt => tt.IsMemberState),
OperaModuleType = 2,
MemberStateIncluded = true,
CreateDate = DateTime.Now,
CreatedByUserId = 1,
};
context.ControlPolicies.AddObject(cp1);
context.SaveChanges();
错误是:
来自“ ControlPolicy_MemberState_Country_” AssociationSet的关系处于“已添加”状态。给定多重性约束,相应的“国家”也必须处于“已添加”状态。
当我查看ChangeTracker时,ControlPolicy对象实际上处于“已添加”状态,而“国家/地区”对象则处于“未定义”状态。我认为这是正确的-毕竟我不添加任何新对象,我只想引用现有的国家/地区。
在这种特殊情况下,错误是由于错误的EF模型造成的。MemberState和Country的关系为1-1,因此对于EF而言,很明显,在添加ControlPolicy时,还必须定义一个新的MemberState(国家)。一旦将导航器关系更改为适当的m:1 MemberState:Country,一切便开始工作。
此外,我发现Rui Jarimba FK建议非常好。即使这里不是问题,并且由于使用ChangeTracker而不适用于我的情况。显然,ChangeTracker不会知道通过FK进行的更改。但是,在任何其他情况下,使用外键都是非常方便和有用的。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句