EF Core-导航属性-填充所有相关类型

时间:2019-10-10 16:15:24

标签: ef-core-2.2

基于下面的简化示例,我有一个EF核心问题:

public class House {
    public int NumberOfBedrooms { get; set; }

    public virtual FrontDoor FrontDoor { get; set; }
}
public class FrontDoor {
    public int HouseNumber { get; set; }

    public virtual House House { get; set; }
}

获取房屋列表,并包含房屋对象的FrontDoor属性

var houses = _dbContext.Houses
              .Include(x => x.FrontDoor)
              .ToList();

获取拥有FrontDoor HouseNumber 10的房屋

var house10 = houses.FirstOrDefault(x => x.FrontDoor.HouseNumber == 10);

然后,如果我想在house10中获得NumberOfBedrooms,可以用两种不同的方式编写代码:

1)

var numberOfBedrooms = house10.NumberOfBedrooms;

这有效,没有任何错误,但是,如果我重新编写获取NumberOfBedrooms的方式,则会导致空引用异常。

2)

var numberOfBedrooms = house10.FrontDoor.House.NumberOfBedrooms;

要停止此NRE,我必须将初始houses查询更改为:

var houses = _dbContext.Houses
              .Include(x => x.FrontDoor)
              .Include(x => x.FrontDoor.House)
              .ToList();

1)这是使用2个House方法两次包含.Include()属性的正确方法吗?

2)是否有其他方法可以停止访问FrontDoor对象上的House导航属性-我相信迁移才能创建正确的SQL表关系?

0 个答案:

没有答案