Entity framework 使用导航属性与使用FK属性相比,我做错了什么?
当我在MVC4操作方法中使用以下代码时,我得到的错误就在下面: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.
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);