Стремительная загрузка и LINQ к юридическим лицам - PullRequest
2 голосов
/ 30 марта 2009

Насколько я понял, LINQ для сущностей поощряет энергичную загрузку с Load() или Include(). Однако мне интересно, где должна происходить активная загрузка в многослойном приложении?

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

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

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

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

Изменить: Пример - http://www.asp.net/learn/mvc/tutorial-29-cs.aspx

public Contact GetContact(int id)

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

1 Ответ

0 голосов
/ 30 марта 2009

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

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

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

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