Это правильное поведение, потому что EF никогда не загружает связанные сущности. Для загрузки связанных свойств вы должны использовать один из следующих подходов:
Ленивая загрузка
Ленивая загрузка обеспечит вам автоматическую загрузку связанных объектов, но сгенерирует дополнительные запросы к базе данных. Связанная сущность или связанная коллекция будут загружены при первом обращении к свойству. Чтобы использовать отложенную загрузку, вы должны пометить все свойства навигации в объекте как virtual
(также отложенная загрузка или создание прокси-сервера не должны быть отключены - это разрешено по умолчанию). Ленивая загрузка работает, только если контекст, используемый для загрузки основного объекта, все еще жив. Чтобы разрешить отложенную загрузку, вы должны изменить свою сущность:
public class Registration
{
public int ID { get; set; }
public int OrganizationID { get; set; }
public virtual Address RegAddress { get; set; }
public virtual ContactInformation RegContactInformation { get; set; }
public string Signature{ get; set; }
}
Стремительная загрузка
Стремительная загрузка определит, какое отношение должно быть загружено вместе с вашей основной сущностью. Стремительная загрузка определяется методом Include
. Вы можете переписать Find as:
var registrations = from r in dbConnections.PlayerRegistrations
.Include(p => p.Address)
.Include(p => p.RegContactInformation)
where r.OrganizationID == orgID
select r;
Имейте в виду, что стремительная загрузка оказывает большое влияние на количество и форму данных, возвращаемых из базы данных.
Явная загрузка
Явная загрузка позволит вам явно сказать, что некоторые отношения должны быть загружены. Вы даже можете определить некоторые условия для загрузки связанных сущностей, что невозможно с двумя другими методами. Сначала вы должны загрузить основную сущность, а перед удалением контекста вы можете сделать что-то вроде:
context.Entry(registration).Reference(c => c.Address).Load();
Этот метод более полезен для загрузки связанных коллекций.
Выборочная загрузка
Выборочная загрузка означает, что вы будете использовать отдельный запрос для каждого отношения. Это похоже на то, что вы не хотите делать, но для некоторой оптимизации производительности переданных наборов результатов это может быть очень полезно (это решает проблему, связанную с активной загрузкой). Смысл этого метода в том, что если вы используете отдельный запрос для отношения, EF все равно будет правильно заполнять свойства навигации. Этот метод имеет смысл только для загрузки связанных коллекций и работает, только если отложенная загрузка отключена.