Поскольку основная часть времени при запросе тратится на его выполнение, то использование ADO.NET вместо популярных ORM для доступа к данным оправдано только там, где ставятся повышенные требования к потреблению памяти и производительности. В большинстве же случаев затраты на ORM окупаются скоростью и простотой разработки, единой моделью доступа к данным и меньшему количеству кода.
Работа с LINQ для SQL на платформе .NET Framework осуществляется с помощью классов пространства имен System.Linq и System.Data.Linq.
Перечислим основные классы этих пространств имен.
□ System.Linq :
• Enumerable
— предоставляет набор статичных методов для работы с объектами, реализующими интерфейс IEnumerable.
• Queryable
— предоставляет набор статичных методов для работы с объектами, реализующими интерфейс IQueryable.
Методы этих классов, вроде Where, Select, Sum
и др., используются в любом LINQ-выражении для построения запросов, обработки и фильтрации данных.
□ System.Data.Linq :
• DataContext
— основной объект для работы с LINQ для SQL, предоставляет контекст базы данных, через который осуществляется доступ ко всем сущностям базы данных;
• EntitySet, EntityRef
(структура) — обеспечивают связь между сущностями в LINQ для SQL;
• Table
— представляет таблицу с возможностью изменения объектов;
• CompiledQuery
— предоставляет возможность компилировать и повторно использовать запросы.
Контекст базы данных, наследующий от класса DataContext
, в LINQ для SQL принято создавать с помощью мастера, который автоматически сгенерирует LINQ для SQL-классов. После такой генерации работа с объектной моделью становится очень простой, например, приведенный в разделе ADO.NET пример в исполнении LINQ для SQL будет выглядеть так:
using (MyDatabaseDataContext dataContext = new MyDatabaseDataContext())
{
string phone = dataContext.Customers
.Where(x => x.name == "Сергей Петров")
.FirstOrDefault().phone;
}
Согласитесь, это заметно более простое решение по сравнению с вариантом, написанным с использованием ADO.NET Dataset.
Entity Framework можно использовать только на .NET Framework версии 3.5 с установленным пакетом обновления SP1. Для работы с Entity Framework предлагаются следующие пространства имен: System.Data.Entities, System.Data.Objects, System.Data.EntityClient и др.
В отличие от LINQ для SQL модель данных Entity Framework (EDM) состоит из трех частей:
□ концептуальная модель (CSDL) — позволяет создавать сущности, не равнозначные сущностям базы данных, например, комплексные сущности, состоящие из элементов нескольких таблиц, или сущности, наследующие от других сущностей;
□ модель хранения данных (SSDL) — определяет логическую модель базы данных;
□ модель сопоставления хранения данных и концептуальной модели (MSL) — определяет, как логическая модель хранения базы данных сопоставляется с концептуальной моделью.
При работе с Entity Framework в Visual Studio 2008 SP1 предлагается мастер автоматического создания модели на базе заданных объектов базы данных. Вы можете использовать его для генерации всех трех частей EDM. Результатом работы мастера станет файл *.edmx, который будет содержать все три модели сразу. Контекст базы данных и отображение на классы C# будут сгенерированы в другой файл *.Designer.cs.
После создания мастером модели EDM вы сможете манипулировать концептуальной моделью, моделью хранения и моделью сопоставления с помощью специального визуального дизайнера Entity Framework. Этот дизайнер, кроме всего прочего, позволяет выполнять и такие операции, как валидацию модели EDM, обновление модели из базы данных.
Другим отличием Entity Framework от LINQ для SQL является разнообразие доступа к модели данных. Существует три варианта работы с EDM:
□ LINQ для сущностей — аналог LINQ для SQL с полной поддержкой всех особенностей Entity Framework;
□ Entity SQL — особенный язык, диалект SQL, который служит для работы с моделью EDM. Имеет ряд отличий и ограничений по сравнению с обычным SQL;
□ третий вариант совмещает в себе первые два, с помощью LINQ-выражений можно строить запросы на языке Entity SQL.
Подробное описание особенностей Entity Framework или Entity SQL выходит за рамки этой книги. Здесь мы приведем только очевидные отличия LINQ для сущностей от LINQ для SQL:
□ поддержка прозрачного мэппинга отношений "многие-ко-многим" в LINQ для сущностей. LINQ для SQL строго отображает структуру базы данных, поэтому промежуточная таблица также будет отображена, и ее потребуется использовать при работе с такими данными;
Читать дальше
Конец ознакомительного отрывка
Купить книгу