Entity framework 使用导航属性与使用FK属性相比,我做错了什么?

Entity framework 使用导航属性与使用FK属性相比,我做错了什么?,entity-framework,entity-framework-4,ef-code-first,Entity Framework,Entity Framework 4,Ef Code First,当我在MVC4操作方法中使用以下代码时,我得到的错误就在下面: var role = _roleRepository.GetByName(model.RegistrationType.ToString()); var mr = new MemberRole(); mr.Priority = int.MaxValue; mr.IsActive = true; entity.MemberRoles.Add(mr); role.MemberRoles.Add(mr); _roleRepository.

当我在MVC4操作方法中使用以下代码时,我得到的错误就在下面:

var role = _roleRepository.GetByName(model.RegistrationType.ToString());
var mr = new MemberRole();
mr.Priority = int.MaxValue;
mr.IsActive = true;
entity.MemberRoles.Add(mr);
role.MemberRoles.Add(mr);
_roleRepository.Update(role);
_memberRepository.Insert(entity);
发生引用完整性约束冲突:定义引用约束的属性值在关系中的主体对象和从属对象之间不一致

我有点理解这一点,但需要移动和交付,尝试了以下方法,给出了下面的错误。我假设我还无法更新角色,因为其中一个
成员角色
的“children”没有有效的
成员
引用(FK):

*INSERT语句与外键约束FK_MemberRole_Role_RoleId冲突。数据库Educ8表dbo.Role列Id中发生冲突*

我最终在MemberRole上仅使用FK属性获得了成功,如下所示,一切都是平静而美好的:

_memberRepository.Insert(entity);
var role = _roleRepository.GetByName(model.RegistrationType.ToString());
var mr = new MemberRole();
mr.MemberId = entity.Id;
mr.RoleId = role.Id;
mr.Priority = int.MaxValue;
mr.IsActive = true;
_memberRoleRepository.Insert(mr);

我的流畅映射和实体类很好,只是我做错了什么,我怀疑是w.r.t.更新的顺序,但不知道是什么。

不是完整的解释,但部分问题是新的
MemberRole
由两个存储库保存(我假设两个不同的上下文)。@GertArnold,我假设您参考了我的第一个代码示例。是的,您是对的,这是两个上下文实例。我可以假定这也会对第二种情况产生影响,
角色
实体
属于两种不同的情况吗?是的,我很确定这是问题的一部分。首先按一个上下文保存
mr
,处理上下文,然后将
mr
添加到另一个
MemberRoles
,这可能会有所帮助。
_memberRepository.Insert(entity);
var role = _roleRepository.GetByName(model.RegistrationType.ToString());
var mr = new MemberRole();
mr.MemberId = entity.Id;
mr.RoleId = role.Id;
mr.Priority = int.MaxValue;
mr.IsActive = true;
_memberRoleRepository.Insert(mr);