想要实体框架6.1急切加载只加载第一级

mic*_*p78 5 entity-framework entity-framework-6.1

我不确定我是接近错误的方式还是默认行为,但它没有像我期望的那样工作......

这是两个样本类......

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public Department Department { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

第二个是部门

public class Department
{
    public string Name { get; set; }

    public List<Person> People { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

上下文配置

public MyDbContext() : base("DefaultConnection") 
{
    this.Configuration.ProxyCreationEnabled = false;
    this.Configuration.LazyLoadingEnabled = false; 
}

public DbSet<Person> People { get; set; }
public DbSet<Department> Departments { get; set; }
Run Code Online (Sandbox Code Playgroud)

我试着加载名字来自'Smith'的人

var foundPeople 
        = context
              .people
              .Where(p => p.LastName == "Smith");
Run Code Online (Sandbox Code Playgroud)

上面的查询加载foundPeople只有FirstName和LastName没有Department对象.这是一个正确的行为,因为我的LazyLoading已关闭.这也是预期的.

现在在另一个带有Eager加载部门的查询中,

var foundPeople 
        = context
              .people
              .Where(p => p.LastName == "Smith")
              .Include(p => p.Department);
Run Code Online (Sandbox Code Playgroud)

上面的查询加载了找到FirstName,LastName,Department with Department-> Name以及Deparment-> People(那个部门的所有人,我不想要的人),我只想加载Included属性的第一级.

我不知道这是一个预期的行为还是我犯了一些错误.

有没有办法只加载包含属性的第一级,而不是完成图或包含属性的所有级别.

Han*_*meG -2

您可以尝试使用 LINQ 查询,这样您就可以仅选择您需要的字段。我希望这有帮助。