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
,但它不起作用。我找不到排除查询中角色的方法。唯一的方法是在…之后加载角色。。。
尝试使用导航属性Student.Role
而不是Student.RoleId
:
var role = ctx.Role.Single(r => r.Id = roleId);
student.Role = role;
一般经验法则是:通过导航属性而不是外键属性来操纵实体关系。