Entity Framework и Linq to Entities и несколько таблиц .Include() или, может быть,

у меня есть база данных с таблицей с именем PropertyValues, где я храню каждое значение, которое мне нужно для описания некоторых свойств строк таблицы моей базы данных.

Например, таблица Products выглядит так:

ID
OrderID //Таблица продуктов связана с таблицей заказов
ProductName
ProductType_ID // ID таблицы PropertyValues, описывающей тип продукта (продукты питания, парфюмерия, химикаты)
ProductCountry_ID // ID таблицы PropertyValues, которая ссылается на страну происхождения товара ProductStatusID //также идентификатор таблицы PropertyValues, которая содержит статус продукта (доступен, недоступен)

с такой моделью базы данных, чтобы получить заказ и все его продукты с их типом, страной и статусом, мне придется написать что-то вроде этого:

var orders = from o in dbEntities.Order.Include("Products.ProductType")
                                       .Include("Products.ProductCountry")
                                       .Include("Products.ProductStatus")
            select o;

и вот вопрос:)
можно ли это сделать автоматически (чтобы все связанные объекты были включены)
или, может быть, есть лучший подход?

Спасибо !


person shkipper    schedule 27.05.2009    source источник


Ответы (1)


Я думаю, что вы ищете либо «ленивую загрузку», либо «нетерпеливую загрузку», как указал Алекс Джеймс.

В этом сообщении блога объясняется, что «отложенная загрузка» должна быть реализована в версии 4.0 Entity Framework.

http://blogs.msdn.com/adonet/archive/2009/05/12/sneak-preview-deferred-loading-in-entity-framework-4-0.aspx

Это можно сделать автоматически, Google «отложенная загрузка Entity Framework», чтобы настроить его.

person MPiccinato    schedule 27.05.2009
comment
Просто чтобы быть ясным, «ленивая» или отложенная загрузка — это не то же самое, что нетерпеливая загрузка. Строго говоря, это то, о чем просят, однако я думаю, что вы были правы, подчеркнув ленивую загрузку, потому что это, вероятно, то, что действительно нужно. Нетерпеливая загрузка выполняет только один запрос. В то время как ленивая загрузка создает иллюзию того, что связанные объекты загружаются в одном запросе, хотя на самом деле это не так. При доступе к связанным объектам EF автоматически выдает дополнительные запросы. - person Alex James; 28.05.2009