Как стать автором
Обновить

asp.net: Entity Framework, одно из отличий от LINQ to Sql

Время на прочтение 2 мин
Количество просмотров 13K
Этой статьей хотел бы открыть цикл статей по Entity Framework. В дальнейшем планирую постить результаты своего опыта в процессе использования EF, а пока я приведу вольное изложение интересной статьи на тему «Чем отличается LINQ to SQL от Entity Framework».

Сравним два куска кода, первый написан с использованием LINQ to SQL:
L2SDataContext linqToSqlContext = new L2SDataContext();

this.MyDataGrid1.DataSource = linqToSqlContext.Customers.First().Orders;

this.MyDataGrid1.DataBind();
* This source code was highlighted with Source Code Highlighter.

В результате этого кода в DataGrid отобразиться три записи.
Следующий код написан с использованием EntityFramework:
EFEntities entityFrameworkContext = new EFEntities();

this.MyDataGrid2.DataSource = entityFrameworkContext.Customers.First().Orders;

this.MyDataGrid2.DataBind();
* This source code was highlighted with Source Code Highlighter.

Как можно убедиться код по структуре практически не отличается. Но вместе с тем, в DataGrid не отобразиться ни одной записи. В чем же тут дело?

Lazy Loading


Ленивая загрузка (Lazy Loading) – это как раз та техника имеющаяся в Linq to Sql, которая скрытно подгружает в первом примере для Customers связанные записи Orders. В Entity Framework ленивая загрузка отсутствует. Этому моменту есть объяснение от команды разработчиков EF: «При разработке большого проекта для разработчиков очень важно ясно представлять себе как они получают доступ к ресурсам, таким как база данных» (When architecting a larger project, it is highly important for developers to clearly understand when they are accessing certain resources, such as the database). Другими словами, EF предлагает разработчикам самим определить, что и когда нужно загружать из базы. И делается это вот так:
this.MyDataGrid2.DataSource = entityFrameworkContext.Customers
  .Include(«Orders»).First().Orders;
* This source code was highlighted with Source Code Highlighter.

Другой способ состоит в том, чтобы явно загрузить данные:
var customer = entityFrameworkContext.Customers.First();

customer.Orders.Load();

this.MyDataGrid2.DataSource = customer.Orders;
* This source code was highlighted with Source Code Highlighter.


Ленивая загрузка – безусловно, полезная вещь и экономит много времени, поэтому далее автор статьи приводит небольшой пример того, как эту технику можно «вернуть» в EF. Пример не самый востребованный, потому что основан на редактировании кода сгенерированного автоматически.

Отсутствие ленивой загрузки — это, пожалуй, одно из основных отличий в EF. Это очень важный момент, который стоит иметь в виду при переходе с Linq to Sql.

Оригинал статьи «Entity Framework and Lazy Loading» можно почитать тут:
www.singingeels.com/Articles/Entity_Framework_and_Lazy_Loading.aspx
Теги:
Хабы:
+5
Комментарии 16
Комментарии Комментарии 16

Публикации

Истории

Работа

.NET разработчик
66 вакансий

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн