EF Core - Навигационные свойства - заполнение ВСЕХ связанных типов - PullRequest
1 голос
/ 10 октября 2019

У меня есть вопрос 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?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...