C#Entity Framework 6加载相关实体

时间:2015-11-23 11:34:45

标签: c# entity-framework

我想通过收到的角色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但它不起作用。我找不到在查询中排除角色的方法。唯一的方法是在......之后加载角色。

1 个答案:

答案 0 :(得分:0)

尝试使用导航属性Student.Role代替Student.RoleId

var role = ctx.Role.Single(r => r.Id = roleId);
student.Role = role;

作为一般经验法则:通过导航属性而不是外键属性来操纵实体关系。