基于下面的简化示例,我有一个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表关系?