Разработка на Entity Framework 6
Когато работим с релационни бази данни, ние използваме таблици с редове и колони, такава инфраструктура на устройство за база данни е много структурирана. Преди широкото приемане на обектно-ориентираното програмиране, ние работихме в рамките на „процедурно“ програмиране - използвайки структуриран код и функции за решаване на проблеми. Оформлението на таблицата, реда и колоната на базата данни беше донякъде подобно на структурните и процедурни модели на програмиране, които използвахме в нашия код. Животът беше хубав.
След това имаше еволюция от страна на кода - сега вече не използваме функции, а мислим от гледна точка на обекти, класове и модели. Процесът на разработка на софтуер значително узря през годините и придоби концептуално ниво - всичко се промени, от кода (OOP, различни рамки и шаблони се появиха, за да улеснят живота) и завършвайки с екипи за разработка (трудно е да си представим съвременен голям проект без архитекти, дизайнери, оптимизатори и т.н.)
В същото време тези промени практически не засегнаха базите данни. Данните все още остават заключени в таблици, редове и колони. Това създава голяма празнина в работата между йерархичен обектно-ориентиран код и силно нормализирана структура на база данни. За да се справят с този проблем, разработчиците предложиха да въведат „обектен слой на база данни“ в софтуерни проекти, в които таблиците на базата данни бяха представени като класове, колоните като свойства и цялата работа с базата данни беше базирана на програмен код без използването на SQL. Този подход се нарича.
Различни софтуерни платформи предлагат много системи, които прилагат ORM модела. комбиниран с LINQ (езикова интегрирана заявка)е изпълнение на ORM за .NET Framework от Microsoft. Entity Framework предоставя механизми за създаване и работа с обекти на бази данни чрез обектно-ориентиран код на CLR-съвместим език (ще използваме C# в нашите примери). LINQ е библиотека, която разширява възможностите на C# и улеснява създаването на заявки (благодарение на LINQ можете да създавате подобни на SQL заявки в C# код).
Entity Framework е продължение на друг API за .NET база данни, ADO.NET, в който трябваше да пишете SQL заявки и да ги вмъквате в команди за работа с бази данни. Мисля, че както разбирате, Entity Framework прави живота много по-лесен за C# програмистите, които са слабо запознати с SQL и в детайлите на работа с бази данни.
История на развитието на Entity Framework
Entity Framework представлява стратегическия подход на Microsoft към технологията за достъп до данни за изграждане на приложения. За разлика от предишните технологии за достъп до данни, Entity Framework, в комбинация с Visual Studio, предоставя богато изживяване с база данни и може да се използва във всяко приложение, било то уебсайт, настолно приложение или уеб услуга. Нека да разгледаме набързо графика за разработка на Entity Framework.
Entity Framework се появи за първи път през 2007 г. и първата му поддръжка беше предоставена в Visual Studio 2008, след което този API измина дълъг път и придоби нови функции:
В първата версия Entity Framework беше доста ограничена и предоставяше само основна реализация на ORM модела, базиран на подхода Database-First (ще разгледаме малко по-късно). Версия 4.0 дойде заедно с .NET Framework 4 и Visual Studio 2010 и ни донесе нов подход - Model-First и POCO поддръжка -обекти (POCO - Plain Old CLR Object). Малко след това екипът за разработка на Entity Framework пусна три версии (4.1 - 4.3), които поддържаха друг подход за внедряване на ORM - Code-First.
Версия 5 на Entity Framework беше пусната с пускането на .NET 4.5 и Visual Studio 2012. Тази версия осигурява значителни подобрения в производителността, заедно с поддръжка за изброявания, таблични функции, пространствени типове Transact SQL, импортиране на съхранени процедури и дълбока интеграция с ASP.NET MVC.
Текущата версия на Entity Framework е 6, която въвежда поддръжка за асинхронни заявки и възможност за работа със запомнени процедури чрез подхода Code-First. Можете да видите по-подробен списък с промени във версиите на Entity Framework на сайта на MSDN в статията История на версиите на Entity Framework.
Entity Framework
Сега нека да разгледаме набързо някои от ключовите точки на Entity Framework.
EDM модел
Entity Framework се фокусира върху моделирането, където ще видите много познати неща - използва ER (entity-relationship, „entity-relationship“) диаграми, подход за проектиране на логически и физически слоеве и много повече. Ядрото на Entity Framework е EDM (Entity Data Model), чиято същност е да съхранява обекти (entity) под формата на строго типизирани класове, а не под формата на обекти на схема на база данни (показани на фигурата по-долу). EDM ви позволява да осигурите връзка между класовете на обекти в кода и таблиците на базата данни.
Обърнете внимание, че на фигурата по-горе таблиците на базата данни не са директно картографирани към класове обекти, вместо това разработчикът има контрол върху процеса на картографиране и може, например,разделяне на таблица на няколко обекта или обратното, комбиниране на няколко таблици в един обект (въпреки че програмистите често не използват тази функция и използват картографирането „1 таблица - 1 обект“).
Архитектурата на Entity Framework в абстрактния смисъл се основава на слоеве (слоеве): работен, отдалечен и обвързващ.
Класовете с код на обекта се съдържат в работния слой, в който работят програмистите. В зависимост от подхода, който използвате (Code-First или DB-First), работният слой може да бъде моделиран или с графичния дизайнер на Visual Studio, или с код. След това програмистите разполагат с широк набор от инструменти за работа с Entity Framework. Синтаксисът на работния слой е описан с помощта на езика за дефиниране на концептуална схема (CSDL).
Отдалеченият слой дефинира таблици, колони, редове, връзки между таблиците на базата данни. Синтаксисът на отдалечения слой е описан с помощта на езика за дефиниране на схема за съхранение (SSDL).
Свързващият слой дефинира картографирането между работния и отдалечения слой, той свързва свойствата на класа на обекта в работния слой с колоните на таблицата на базата данни в отдалечения слой. Можете да контролирате този слой (т.е. подробностите за обвързване) от прозореца с подробности за картографирането, намиращ се в инструментите за проектиране на Visual Studio, или чрез анотациите на Fluent API, ако работите с подхода Code-First. Езикът за спецификация на картографиране (MSL) дефинира синтаксиса на залепващия слой.
Важно е да се отбележи, че всички CSDL, SSDL и MSL имат XML синтаксис, но използват различна семантика.
Entity Framework файлове
След като създадете ново приложение, което разчита на Entity Framework и добавите класовете на база данни на обекти, ще можете да видите получените файлове в главната папкапроект (в следващата статия ще опишем по-подробно генерирането на класове обекти). Във Visual Studio 2012 ще намерите един XML файл с модел на данни за обект (.EDMX), въпреки че по-старите версии на Visual Studio вероятно ще създадат множество файлове (по един за всеки обект).
Един EDMX файл съдържа няколко секции, написани на CSDL, SSDL и MSL, които представляват различни слоеве в архитектурата на Entity Framework. За да отворите изходния код на този файл във Visual Studio, щракнете с десния бутон върху него и изберете Отваряне с… от контекстното меню и след това изберете опцията XML Editor в диалоговия прозорец.
Разделът CSDL съдържа XML, необходим за изграждане на работния слой:
Имайте предвид, че CSDL описва генерираните обекти и връзките между тях в раздела EntityContainer. Елементите EntityType описват структурата на обектите - имена на колони и първични ключове. Обърнете внимание на атрибута Type, който указва типа на обекта – в този случай се използват типове, съвместими с .NET, а не типове T-SQL.
Разделът с SSDL код описва структурата на таблиците на базата данни, тяхната структура, съхранени процедури и др. Секциите EntityContainer и EntityType са подобни на секцията CSDL, но записите разчитат на типове данни на T-SQL, а не на .NET. Примерът по-долу показва част от секцията с SSDL код:
MDL кодът обвързва обектите, посочени в секциите SSDL и CSDL, и определя как данните от базата данни ще бъдат съпоставени с .NET класове. Примерът по-долу показва част от секцията с MDL код:
Подходи за работа с Entity Framework
Entity Framework поддържа три подхода за разработка:
База данни-първо
Подходящо за дизайнери на бази данни - първо създавате база данни с помощта на различни инструменти(например SQL Server Management Studio) и след това генерирайте EDMX модел на база данни, който предоставя удобен графичен интерфейс за взаимодействие с базата данни под формата на диаграми и обектен модел под формата на C# класове. В този случай трябва да работите с SQL Server и да имате добри познания по синтаксиса на T-SQL, но не е необходимо да разбирате C#.
Първият модел
Подходящо за архитекти - първо създавате графичен EDMX модел във Visual Studio (C# моделните класове се създават във фонов режим), а след това генерирате база данни въз основа на EDMX диаграмата. С този подход не е необходимо да знаете подробности за синтаксиса на T-SQL или C#.
Първи код
Подходящ за програмисти - този подход изобщо не използва модела EDMX и вие ръчно конфигурирате класовете на C# обектен модел (този подход поддържа както генериране на класове обекти от съществуваща база данни, така и създаване на база данни от ръчно създаден C# обектен модел). Очевидно това е подходящо за програмисти, които са запознати със синтаксиса на C#.
По-късно ще разгледаме всеки от тези подходи по-подробно.