我想通过收到的角色ID 更新学生角色。
问题在于,如果我在加载学生实例之前加载角色实例,则实体角色将包含在查询中,并且实体自动附加,并且更新失败并显示正确的完整性消息错误(下图)。
using (var ctx = new SchoolContext())
{
ctx.Configuration.LazyLoadingEnabled = false;
var role = ctx.Role.Select(x => x).ToList();
var student = ctx.Students.Include(s => s.Courses)
.Where(s => s.Id = id);
student.RoleId = roleId;
ctx.SaveChanges();
}
错误:
发生了参照完整性约束违规: 关系一端的
Role.Id
的属性值不会 匹配另一端Student.RoleId
的属性值。
我明确使用LazyLoadingEnabled = false
但它不起作用。我找不到在查询中排除角色的方法。唯一的方法是在......之后加载角色。
答案 0 :(得分:0)
尝试使用导航属性Student.Role
代替Student.RoleId
:
var role = ctx.Role.Single(r => r.Id = roleId);
student.Role = role;
作为一般经验法则:通过导航属性而不是外键属性来操纵实体关系。