У меня есть вопрос EF Core, основанный на упрощенном примере ниже:
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 объекта House
var houses = _dbContext.Houses
.Include(x => x.FrontDoor)
.ToList();
Получить дом с FrontDoor HouseNumber 10
var house10 = houses.FirstOrDefault(x => x.FrontDoor.HouseNumber == 10);
Тогда, если я хочу получить NumberOfBedrooms в house10
, я могу написать код двумя разными способами:
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) Это правильный способ включить свойство House
дважды, используя методы 2 .Include()
?
2) Есть ли возможность остановить доступ к свойству House
навигации объекта FrontDoor - я полагаю, что оно требуется для миграций для создания правильных связей таблиц SQL?