对于这篇文章,我有一个简单的模型。
两个实体角色和人物。
public class Role : Entity
{
public Guid Id { get; set; }
public string Name { get; set; }
public virtual ICollection<Person> PeopleWithThisRole { get; set; }
}
public class Person : Entity
{
public Guid Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public Guid? RoleId { get; set; }
}
如果我从EF上下文中获取角色,则PeopleWithThisRole集合为空(除非我.Include
。正如预期的那样。
然而,如果我得到了角色,那么我就会得到以下人员
var roles = _context.Roles.ToList();
var people = _context.People.ToList();
然后roles.PeopleWithThisRole
集合完全由人填充,而不必.Include
。
这是预期的行为还是应该将其作为错误提出?
由于
更新
非常感谢下面的@hvd,我决定让实体保持干净,不要使用[JsonIgnore]属性,而是映射到DTOS(不包括我在JSON中不需要的那些属性) - 这是可能是正确的方法!
答案 0 :(得分:3)
预期以及早期版本的EF如何运作。
您的_context
会跟踪在该上下文中加载的实体,以便保存更改。在该上下文中,已加载Person
个对象(根据您的要求)并且已知其RoleId
个值。在相同的上下文中,已加载具有相同Role
值的Id
个对象(也可根据您的要求)。 EF根据这些ID链接内存中的对象。如果跟踪发送到服务器的SQL查询,您应该发现除了您请求的查询之外没有发送任何查询。