这是预期的实体框架7 /核心行为还是一个错误?

时间:2016-04-16 15:06:21

标签: entity-framework entity-framework-core

对于这篇文章,我有一个简单的模型。

两个实体角色和人物。

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中不需要的那些属性) - 这是可能是正确的方法!

1 个答案:

答案 0 :(得分:3)

预期以及早期版本的EF如何运作。

您的_context会跟踪在该上下文中加载的实体,以便保存更改。在该上下文中,已加载Person个对象(根据您的要求)并且已知其RoleId个值。在相同的上下文中,已加载具有相同Role值的Id个对象(也可根据您的要求)。 EF根据这些ID链接内存中的对象。如果跟踪发送到服务器的SQL查询,您应该发现除了您请求的查询之外没有发送任何查询。