2009-03-30 4 views
2

Насколько я понял, LINQ для объектов поощряет нетерпеливую загрузку Load() или Include(). Однако я задаюсь вопросом, где должна стремительно загружаться многослойная программа?Eager-loading & LINQ to Entities

Правильно ли для слоя доступа к данным (класс хранилища инкапсуляции экземпляра Entity), чтобы иметь общую Item GetItem(int id) функции, а также в бизнес-логике сделать

Item item = dbRepository.GetItem(itemId); 
if (!item.itemDetails.IsLoaded) 
item.itemDetails.Load() 

Или класс хранилища имеет различный явный функции, которые загружают различные внешние отношения, поэтому возвращают элемент отношений с нетерпением?

Большое спасибо!

Edit: Пример - http://www.asp.net/learn/mvc/tutorial-29-cs.aspx

public Contact GetContact(int id) 

Эта функция возвращает тип Contact объекта. Однако, в зависимости от потребностей бизнес-логики, мы можем хотеть Load() или Include() различных внешних связей объекта Contact. Означает ли это требование, что нам нужно больше перегружать методы GetContact() с параметрами, указывающими, какие отношения для загрузки, или просто сделать Load() в бизнес-логике?

ответ

0

По большей части, я не делаю ни одного. Вместо этого я использую LINQ для сопоставления типов объектов с типами презентационных моделей. В этом случае вам вообще не нужно думать о загрузке. Например:

var presentationModel = (from entity in Repository.Entities 
         select new PresentationEntity() 
         { 
          Prop = entity.Prop, 
          ChildProp = entity.Child.Prop 
         }).First(); 

Обратите внимание, что мне не нужно было думать о загрузке Ребенка. LINQ для сущностей делает это для вас, когда вы создаете другой тип.

+0

Спасибо за ваш ответ. Где должна быть такая логика? Если мы выполняем сопоставление на уровне модели (я предполагаю MVC), то разве мы не путаем модельный класс с моделью Presentation, так что уровень доступа к данным должен знать модель представления? –

+0

Сопоставление типов репозиториев с типами презентационных моделей (и наоборот) должно быть в контроллере. –

+0

Это означает, что запросы linq также будут в контроллере? (Извините, я довольно новичок в этом) –