2016-09-23 2 views
0

Может ли кто-нибудь опубликовать правильный и полезный пример использования ленивой загрузки EF в приложении MVC?Реальные примеры использования EF ленивой загрузки в приложении MVC

Я пытался исследовать вопрос, но я не могу получить правильный случай.

В результате мой вывод таков: поскольку веб-приложения являются апатридами, нет смысла включать LL в объекты. Но это звучит странно. Вот почему вопрос здесь.

Можете ли вы подтвердить или иным образом опровергнуть мой вывод?

EDIT

Постулаты "без гражданства" в контексте вопроса имеет важное значение в моем сознании. Давайте притворимся 2 сценариями. Первый относится, например, к WPF-приложению, а второй - к MVC. Предположим, что это следующий простой объект:

public class Person 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
    ... 
    public virtual List<Activity> Activities { get; set; } 
} 

1) WPF. Пользователь может запросить единственного человека без его деятельности. Таким образом, он получает небольшую часть данных. Накладные расходы являются разумными. В то же время пользователь может решить запросить действия человека. Благодаря механизму ll EF просто загружает действия без запроса объекта person, так как Person все еще существует в приложении (конечно, если мы его кодируем таким образом).

2) MVC. Те же действия есть. Но единственная разница в том, что после ответа сервера все ресурсы, включая объект Person, располагаются. И мы не можем загружать действия Person, как это было в приложении WPF. Мы вынуждены снова загружать Person (накладные расходы увеличиваются по сравнению с WPF-приложением)

Дело в том, что Lazy-загрузка может выполняться только в области контекста, к которой привязана сущность, - если вы распоряжаетесь контекстом, вы не можете используй это.

+0

обратитесь по этой ссылке: http://www.codeproject.com/Articles/652556/Can-you-explain-Lazy-Loading –

+0

Не могли бы вы внимательно прочитать вопрос? Ваша ссылка не отвечает на него. m знает, что такое ленивая загрузка, но я хотел бы знать, есть ли оправданный сценарий ее использования в веб-приложениях. – managerger

+0

См. статью: https://auth0.com/blog/12-steps-to-a-faster -web-app/ –

ответ

2

Я не думаю, что вы понимаете, что делает ленивая загрузка, поскольку это не имеет никакого отношения к тому, есть ли какое-либо состояние или нет. Это не похоже на кеширование или что-то в этом роде. Lazy loading просто Entity Framework перегружает свойство, чтобы добавить пользовательский getter, который выдает запрос для извлечения объекта или набора объектов при первом доступе к свойству.

Например, если у вас что-то вроде:

public class Foo 
{ 
    public virtual Bar Bar { get; set; } 
} 

И вы должны были запросить набор Foo с из базы данных, Bar собственность на всех из них будет нулевой, так как EF не будет иметь выпустил любые запросы, но еще не предоставил соответствующий пример Bar. Однако, если вы должны были перебрать этот список Foo и получить доступ к некоторому свойству на Bar (то есть foo.Bar.Baz, тогда EF выдаст запрос точно в момент для экземпляра Bar, чтобы он смог вернуть свойство Baz.

+0

Не могли бы вы взглянуть на раздел EDIT? Надеюсь, вы получите мою точку зрения. Заранее спасибо! – managerger

+0

Я думаю, что он означает безгражданность Интернета и тот факт, что каждый запрос собирается создать экземпляр контроллера и соответствующий контекст ef. – Fran

+0

@fran, да, человек. У вас есть это. Давайте разместим ваши мысли о ответе на вопрос) Спасибо) – managerger