C#实体框架6加载相关实体

本文关键字:实体 加载 框架 | 更新日期: 2023-09-27 18:23:53

我想通过收到的角色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的属性值不与另一端的CCD_ 2的属性值相匹配。

我明确使用了LazyLoadingEnabled = false,但它不起作用。我找不到排除查询中角色的方法。唯一的方法是在…之后加载角色。。。

C#实体框架6加载相关实体

尝试使用导航属性Student.Role而不是Student.RoleId:

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

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