Entity Framework 6, Подходи за работа

Код Първи подход

ПодходътCode-First, който беше въведен за първи път в Entity Framework 4.1, обикновено се използва, когато имате съществуващо приложение, което съдържа модел на данни. Този модел обикновено се описва с помощта на няколко класа и кода за взаимодействие между тези класове. Например, можете да създадете клас, наречен Customer, който ще съдържа подробности за клиент в онлайн магазин:

Можете да използвате този клас модел във вашето приложение, без да създавате база данни. Чрез добавяне на допълнителен код можете да съхранявате обекти от този клас, например, на диск в XML формат или в паметта на работния поток на програмата. Въпреки това, тъй като вашето приложение расте и става голямо, тези данни ще трябва да се съхраняват в база данни. Това е мястото, където подходът Code-First влиза в действие - можете да използвате съществуващ код, за да създадете база данни, без да се притеснявате за подробностите за внедряването на базата данни (Entity Framework ще се погрижи за това), или можете да се съсредоточите върху кода.

Важно е да се отбележи, че класът, представляващ модела на данни, трябва да има поле за идентификатор, което ще се използва като първичен ключ в таблицата на базата данни. Entity Framework автоматично намира такова поле с помощта на отражение (то трябва да съдържа низа „Id“ в името си, така че полето CustomerId в примера по-горе автоматично ще се използва като първичен ключ.) Това ограничение може да бъде заобиколено чрез използване на свойство с произволно име и маркирано със специални C# атрибути на метаданни, които се използват в Entity Framework. Няма да ги описваме тук, просто съсредоточих вниманието си върху тази точка, защото показва, че всякакви настройки на първични и външни ключове,ограничения между таблици и др. при подхода Code-First те се специфицират в модела (т.е. в управляван C# код) и след това се проектират в базата данни.

Подходът Code-First се появи по-късно от подходите Model-First и Database-First и, както вече разбрахте, е най-подходящ за разработчици, които искат да пишат код, а не да работят с EDM дизайнер или инструменти за база данни (SQL Server Management Studio и T-SQL). Можете да създадете модел за вашето приложение, като използвате специални обектиCommon Language Runtime (CLR) иPlain Old CLR Object (POCO).

Когато проектирате приложения с подхода Code-First, вие първо създавате класове на модел на данни, без да се съобразявате с Entity Framework. След като трябва да работите с базата данни, вие използвате различни инструменти, които проектират структурата на базата данни от генерирания клас модел. След това можете да се върнете към този модел в кода и например да го промените. След това тези промени могат да бъдат отразени в базата данни, като се използват всички същите инструменти.

Важна иновация на версията на Entity Framework 5 по отношение на подхода Code-First е, че генерираният модел на класа сега е незабавно EDM (Entity Data Model), така че няма нужда да използвате EDMX файл. В по-ранните версии разработчикът, използващ подхода Code-First, трябваше да добави връзки между модела на класа и EDMX файла, т.е. показва всички промени в модела на две места едновременно. Очевидно този подход доведе до много грешки, ако разработчикът забрави да синхронизира тези промени в двата файла.

За да кажете на Visual Studio, че моделът на класа е EDM, първо трябва да инсталирате модулите на Entity Framework в проекта,и второ, добавете контекстен клас на база данни, наследен от класаDbContext в пространството от имена System.Data.Entity, както е показано в примера по-долу (ще обсъдим инсталирането на Entity Framework и конфигурацията на контекстния клас по-подробно по-късно):

Не е нужно да се притеснявате как да взаимодействате с базата данни, Entity Framework дефинира редица помощни методи. Не е необходимо да знаете подробностите за връзката или дори името на базата данни. Следното е пример за вмъкване на данни в таблица с помощта на тестовия клас Customer, показан по-горе:

Първи модел подход

ПодходътModel-First, въведен за първи път в Entity Framework 4, се използва от разработчици, които не искат да използват СУБД инструменти за създаване и управление на бази данни и не искат ръчно да конфигурират EDM класове. Всъщност това е най-простият подход при работа с Entity Framework. Дизайнът на модела се извършва в EDM графичния дизайнер на средата на Visual Studio. Може да сте виждали използването на Model-First в предишна статия, където създадохме просто ASP.NET приложение.

Работният процес Model-First за създаване на модел започва в момента, в който проектирате базата данни. В същото време се нуждаете от минимални познания за структурата на базата данни, например, за да настроите връзки между таблици в графичния дизайнер или да посочите SQL типовете данни на полетата на таблицата.

Както при подхода Code-First, цялата работа е изградена около контекстния клас на базата данни. Всъщност взаимодействието с базата данни при тези подходи е едно и също. Например, за да вмъкнете обект, се използва следната последователност от действия:

Създайте моделен обект и го попълнете с данни.

Създайте контекстен клас, който наследява от DbContext(в подхода Code-First това се прави ръчно, в Model-First този клас се генерира автоматично заедно с класовете обекти).

Добавете обект към базата данни с помощта на контекстния клас.

База данни - първи подход

Подходът Database-First, въведен с Entity Framework, ви позволява да пишете приложения срещу съществуващи бази данни. Базите данни в приложенията от реалния свят стават сложни доста бързо и опитът да се създаде модел за съществуваща база данни, който разработчиците могат да разберат, е доста труден. Още по-трудно е да напишете кода за използване на модела, който взаимодейства с базата данни. В много отношения подходът Database-First е противоположен на подхода Model-First. При подхода Database-First базата данни вече съществува, така че разработчикът трябва да знае къде се намира базата данни, както и информация за името на базата данни. Разработчикът обаче не трябва да разбира вътрешната работа на базата данни - Entity Framework все още скрива вътрешната реализация от изгледа.

С този подход работният процес за създаване на модел започва със създаването и проектирането на базата данни. След генериране на класове на модел на обект от съществуваща база данни, работата с Entity Framework е подобна на подходите Code-First и Model-First. Това означава създаване на обект от контекстния клас и използване на този обект за изпълнение на необходимите задачи.

Доставчици на данни, съвместими с Entity Framework

За да получите достъп до база данни с помощта на Entity Framework, трябва да използвате доставчици на данни, съвместими с Entity Framework.Доставчиците на данни организират взаимодействието между класовете обекти и системата за управление на бази данни (СУБД). Всъщност те са отговорни за напр.какъв C# код да генерирате от базата данни, когато използвате подхода Database-First, или какъв SQL код да генерирате, когато картографирате EDMX графичния модел към базата данни.

Visual Studio се доставя с доставчика на данниSqlClient по подразбиране, което ви позволява достъп до повечето версии на SQL Server: 2005, 2008, 2010, 2012, 2014. Започвайки с Visual Studio 2010, Microsoft отказа поддръжката за SQL Server 2000. Можете също да създадете приложение, което има достъп до SQL Server Compact. Този доставчик обаче има някои сериозни ограничения, като например невъзможността да поддържа схеми със същото име на ограничение.

Можете също да получите достъп до редица доставчици на данни от трети страни за други СУБД. Следните СУБД в момента поддържат доставчици на данни Entity Framework: MySQL, Oracle, Progress, VistaDB, Devart, OpenLink, SQL Anywhere, Sybase, SQLite, Synergex, Firebird и PostgreSQL (чрез доставчика Npgsql).

Списъкът с доставчици не включва поддръжка за база данни на Access Microsoft. Освен това Entity Framework не поддържа по-стари технологии и методи за достъп, като Open Database Connectivity (ODBC). За да получите поддръжка на Entity Framework за конкретна база данни, можете да създадете EF-съвместим доставчик за нея. Можете да прочетете повече за това в статията „EF5 Sample Provider“.

Как да изберем правилния подход?

Този въпрос си задава всеки разработчик, който планира да работи с Entity Framework. В този случай може да се препоръча да се придържате към целите на всеки от подходите. Например, ако стартирате приложение от нулата и нямате база данни, тогава е по-удобно да използвате подхода Model-First. Ако базата данни съществува, може да се използва Database-First. Ако трябва да добавитеПоддръжката на Entity Framework в съществуващо приложение, където моделът на данните е дефиниран, най-логично е да се използва подходът Code-First.

Въпреки това може да е препоръчително да използвате удобен за разработчиците подход. Очевидно подходът Database-First е удобен за разработчици, които са добре запознати с дизайна на бази данни и познават основите на T-SQL, т.к. този подход включва ръчно създаване на базата данни. Model-First е по-подходящ за архитекти на приложения, тъй като използва удобна графична среда и абстрахира внедряването на базата данни и създаването на моделни класове. Code-First е по-удобен за C# програмисти, защото ви позволява да персонализирате подробности за базата данни от код.

Следващата таблица показва обобщение на различните подходи за работа с Entity Framework: