Galin Iliev

Software Architecture & Development

LINQ to Entities

Следащият голям клон в LINQ е LINQ to Entities (или още познат като ADO.NET vNext или ADO.NET Entity Framework). Неговата имплементация изисква много повече ресурси от тази на LINQ to SQL, което в комбинация с недостатъчното време до официалното пускане на пазара на VS 2008 принуди екипа да извади LINQ to Entities от пакета възможности на VS 2008. Това не означава, че ще трябва да чакаме до следващата версия на Visual Studio, за да го използваме – след като бъде завършено LINQ to Entities ще бъде пуснато като допълнение към Visual Studio.

Ако обърнахте внимание при работа с LINQ to SQL всеки клас от C# е директно свързан към една таблица/изглед от MS SQL Server – или имаме директно свързване (mapping) на бизнес обекта със механизма за съхранение. Някои проекти с по-сложна схема на базата данни изискват съхранение на един обект в няколко таблици, което изисква по-сложно свързване (mapping). По този начин логическата схема на бизнес обектите може да се различава значително от схемата на базата данни. Това прави LINQ to Entities много по-завършен ORM инструмент от LINQ to SQL.

За да сравним по-добре LINQ to Entities с LINQ to SQL нека да разгледаме следната таблица с основни възможности[6]:

Feature

LINQ to SQL

LINQ to Entities

Language Extensions Support

Y

Y

Language Integrated Database Queries

Y

Y

Many-to-Many (3way Join/Payload relationship)

N

N

Many-to-Many (No payload)

N

Y

Stored Procedures

Y

N (to be added)

Entity Inheritance

N

Y

Single Entity From Multiple Tables

N

Y

Identity Management / CRUD features

Y

Y

Самата архитектура на LINQ to Entity добавя допълнителен слой между езиковата конструкция, определяща заявката (код на C#) и заявката към слоя за съхранение на данните (MS SQL Server, Oracle и др.). В този слой EntityProvider изплозвайки дефинирата схема за  свързване (mapping) преобразува заявката в подходяща за схемата и езика на слоя за съхранение на данните.

За да работим с LINQ to Entity трябва да създадем Entity Data Model (EDM), подобно на Създаване на модела на базата в LINQ to SQL с тази разлика, че освен генерирани класове трябва да се направи файл, който да указва свързването. Този файл е в XML формат. След това може да работим с данните по същият начин, по който работихме и в LINQ to SQL, защото вътрешните детайли остават скрити за нас.

LINQ to Entity (Entity Framework), както показва и името, е цяла нова система за работа с данни – нов framework и цялостното му обхващане може да се събере в отделна книга. Затова ще спрем до тук с описанието и ще изчакаме следващите етапи в развитието му.

 

Следваща част: LINQ to DataSet

Content