Как определить, установлено ли свойство навигации в Entity Framework без загрузки связанных записей - PullRequest
10 голосов
/ 24 июня 2011

Я не уверен насчет Навигационных свойств в EF 4, поэтому я прошу вас объяснить.

Давайте представим себе следующие сценарии:

A)

У меня естьдве сущности A и B с отношением N к N (многие ко многим) и дерево Таблица в моей базе данных A и B и таблица ссылок AB с двумя внешними ключами .

В этом сценарии EF создает навигационное свойство, которое можно назвать его X, а также XReference.

B)

Iиметь две сущности A и B с отношением 1 к N (один ко многим) и две таблицы в моей базе данных A и B с одним внешним ключом .

В этом сценарии EF создает Навигационное свойство, позволяющее назвать его Y , но не YReference.

Теперь давайте возьмем сценарий A и B и попробуемчтобы выяснить, есть ли какая-либо ссылка на A в B:

Мой код для сценария:

A):

bool isA = a.XReference.EntityKey != null;

Я не загружаю Bзаписи (правильно?)

B):

bool isA = a.B.Any(x => x.BId == AId);

Я загружаю записи B

Мои вопросы:

  • Почему EF не создает YReference иЯ не могу использовать свойство EntityKey в сценарии B.
  • В моем сценарии кода B, действительно ли я не загружаю записи из B?
  • Знаете ли вы лучший подход для выполнения этого запросабыстро?

Спасибо, ребята, за вашу помощь, надеюсь, я смог дать понять: -)

Ответы [ 2 ]

8 голосов
/ 11 октября 2014

Вот способ проверить, загружены ли связанные записи для объекта или нет.

Для объекта, у которого есть несколько записей, связанных с объектом, вы можете проверить, как показано ниже. (Отношение один ко многим)

myDbContext.Entry(MyEntity).Collection(x => x.NavigationalProperyName).IsLoaded

И если у вас есть только одна запись, связанная с сущностью, вы можете проверить, как показано ниже. (Отношение один к одному)

myDbContext.Entry(MyEntity).Reference(x => x.NavigationalProperyName).IsLoaded
1 голос
/ 24 июня 2011

Вы имеете в виду:

// -to-one relationship
entity.RelatedItemReference.IsLoaded

// -to-many relationship
entity.RelatedItems.IsLoaded
...