Ссылки Entity Framework не загружаются автоматически - PullRequest
7 голосов
/ 23 июня 2009

В ADO.Net Entity Framework у меня есть объект, который имеет 4 ссылки на другие объекты. По какой-то причине, когда я запрашиваю эти ссылки, две из них загружаются автоматически (как и ожидалось), а две из них всегда возвращают ноль.

Как ни странно, когда я вручную запрашиваю ссылки для загрузки, они загружают просто денди.

Как пример:

if (account.HoldingEntity == null && 
    account.HoldingEntityReference.EntityKey != null) {

    account.HoldingEntityReference.Load();
    account.HoldingEntity = account.HoldingEntityReference.Value;
}

Когда я впервые проверяю HoldingEntity, он всегда равен нулю, однако Load без проблем вернет значение HoldEntity.

Есть какие-нибудь подсказки?

Спасибо!

Ответы [ 3 ]

7 голосов
/ 23 июня 2009

Используя объекты ADO.NET, вам нужно указать, какие объекты вы хотите загружать автоматически с помощью Include, как в

Dim entity = (From e in db.Entities.Include("SubEntity"))
5 голосов
/ 23 июня 2009

Как уже говорили другие, вам нужно .Include() в v1, чтобы избежать необходимости звонить .Load()

В 4.0 вы сможете установить DeferredLoadingEnable d на ObjectContext (я думаю, что мы меняем это имя на более подходящее LazyLoadingEnabled по времени для Beta2).

Что касается того, почему вы все равно уже загрузили 2 отношения. Вероятно, это побочный эффект того, что называется «Исправление отношений».

Когда два связанных объекта находятся в одном и том же контексте, они автоматически фиксируют свои отношения так, чтобы они указывали друг на друга. Поэтому, если (как я подозреваю) 2 из 4 сущностей уже находятся в вашем контексте, при выполнении запроса вы окажетесь в ситуации, когда загружены 2 ваших отношения, даже если вы не вызывали .Include() .Load().

Надеюсь, это поможет

Приветствие Alex

0 голосов
/ 23 июня 2009

Это было сделано в EF v1 как проектное решение, и многие разработчики на самом деле предпочитают иметь явный контроль над тем, когда и когда ссылочные свойства будут загружены.

Для EF v4, выходящей с .NET 4.0 до конца 2009 года, у вас будет возможность включить автоматическую отложенную загрузку, если вы того пожелаете. См. этот пост в блоге команды ADO.NET для получения дополнительной информации об отложенной загрузке в EF v4.

Марк

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