Да, это распространенная проблема, когда вы начинаете использовать платформу Entity - ни родительские, ни дочерние отношения не загружаются с отложенной загрузкой, поэтому вы должны загружать их явно. Если вы собираетесь разделить контекст объекта между классами / методами, вы можете проверить, загружены ли отношения уже:
например.
if(!user.Account.IsLoaded)
user.Account.Load();
Вы можете сделать это проще с помощью простого метода расширения:
public static class EntityExtensions
{
public static void EnsureLoaded(this RelatedEnd relatedEnd)
{
if (!relatedEnd.IsLoaded)
relatedEnd.Load();
}
}
использование этого делает ваш вызов снова короче:
user.Account.EnsureLoaded();
И поскольку он использует RelatedEnd, который является общим для родительских и дочерних отношений в структуре сущностей, вы можете использовать это и для родительских ссылочных отношений - например,
account.UserReference.EnsureLoaded();
Как говорит rwwilden, если в этом случае вы всегда собираетесь загружать дочерние объекты с родителем, вы можете использовать функцию Включить, чтобы сделать вызов более эффективным и избежать дополнительного обращения к базе данных.