Добавил:
Преподаватель Колледжа информационных технологий Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лекции / Глава 17. Entity Framework

.pdf
Скачиваний:
68
Добавлен:
08.05.2022
Размер:
1.63 Mб
Скачать

С помощью специального класса PluralizationService Entity

Framework проводит сопоставление между именами классов моделей и именами таблиц. При этом таблицы получают по умолчанию в качестве названия множественное число в соответствии с правилами английского языка, например, класс User - таблица Users, класс Person - таблица People (но не Persons!).

Названия столбцов получают названия свойств модели.

Если нас не устраивают названия таблиц и столбцов по умолчанию, то мы можем переопределить данный механизм с помощью Fluent API или аннотаций.

§17.4 Автоматизация Code First

Вручную создавать классы по уже готовой базе данных со всеми полями и связями между собой довольно утомительно, особенно если таблиц в БД очень много. В обновленных версиях Visual Studio 2019 мы можем автоматизировать этот процесс.

Для этого добавим в проект новый элемент Модель ADO.NET Entity Data Model (EDM):

Рисунок 9

11

Нажмем OK и нам откроется мастер создания модели. Здесь нам надо выбрать пункт Code First из базы данных:

Рисунок 10

Далее на следующем шаге настройки модели надо будет установить подключение к имеющейся базе данных.

12

Рисунок 11

После этого в окне мастера настройки модели появится выбранное подключение. И также здесь мы можем установить название подключения,

которое будет использоваться в файле конфигурации App.config. Изменим его,

например, на UserContext:

Рисунок 12

13

Нажмем «Далее», и на следующем шаге нам будет предложено выбрать те таблицы из базы данных, по которым нам надо создать модели:

Рисунок 13

И затем нажмем «Готово». После этого будут сгенерированы классы моделей. Например, в моем случае по единственной таблице в базе данных будет сгенерирован следующий класс:

Листинг 17.4

1

public partial class User

2

{

3

public int Id { get; set; }

4

[StringLength(50)]

5

public string Name { get; set; }

6

public int? Age { get; set; }

7

[StringLength(50)]

8

public string Log { get; set; }

9

[StringLength(50)]

10

public string Password { get; set; }

11

}

12

public partial class User

13

{

14

public int Id { get; set; }

15

[StringLength(50)]

16

public string Name { get; set; }

 

14

17public int? Age { get; set; }

18}

Итакже надо отметить, что в файле App.config появилось определение

подключения:

<connectionStrings>

<add name="UserContext" connectionString="data source=(LocalDB)\MSSQLLocalDB;attachdbfilename=|DataDirectory|\userdb. mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

</connectionStrings>

Для полноценной работы добавим в проект класс контекста данных

UserContext:

Листинг 17.5

1

public class UserContext : DbContext

2

{

3

public UserContext() : base("UserContext")

4

{ }

5

public DbSet<User> Users { get; set; }

6

}

И теперь мы можем взаимодействовать с базой данных. Для этого разработаем графический пользовательский интерфейс, как на рисунке 8, и

добавим в класс формы те же самые методы, которые были созданы для получения данных из БД (листинг 17.3).

§17.5 Database First

Database First был первым подходом, который появился в Entity Framework. Данный подход во многом похож на Model First и подходит для тех случаев, когда разработчик уже имеет готовую базу данных.

Чтобы Entity Framework мог получить доступ к базе данных, в системе должен быть установлен соответствующий провайдер. Так, Visual Studio уже поддерживает соответствующую инфраструктуру для СУБД MS SQL Server.

Для остальных СУБД, например, MySQL, Oracle и других надо устанавливать соответствующие провайдеры1.

1 Список провайдеров для наиболее распространенных СУБД можно найти на странице https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/ado-net-overview?redirectedfrom=MSDN

15

Итак, создадим новый проект по типу Приложение Windows Forms.

После создания нового проекта, чтобы задействовать базу данных, нам надо

ееиметь. Создадим новую базу данных или возьмем уже имеющуюся.

ВVisual Studio в окне Обозреватель решений нажмем на проект правой кнопкой мыши и выберем Добавить → Создать элемент. Далее в появившемся окне добавления нового элемента выберем Модель ADO.NET EDM. Дадим новому компоненту какое-либо название, например, User:

Рисунок 14

После этого нам откроется окно мастера создания модели. В нем нам

надо выбрать опцию Конструктор EF из базы данных.

16

Рисунок 15

Затем откроется окно следующего шага по созданию модели, на котором надо будет установить подключение к базе данных:

Рисунок 16

Ввыпадающем списке выберем одно из доступных подключений. Если

всписке нет предпочтительных подключений, то можно нажать на кнопку

Создать соединение… и установить новое подключение.

17

Также внизу указывается название контекста данных, который будет использоваться для доступа к данным. По умолчанию у меня контекст имеет название userdbEntities. Можно изменить, а можно и оставить.

Выбрав подключение, переходим к следующему шагу. Если у нас Visual Studio 2019 без пакетов обновления, то будет предложено также выбрать версию Entity Framework. Выберем шестую версию:

Рисунок 17

Далее Visual Studio извлекает всю информацию о базе данных:

18

Рисунок 18

Раскроем узел Таблицы. Он отображает все таблицы, имеющиеся в базе данных. В моем случае имеется только одна таблица Users. Отметим все подузлы в ветке Таблицы.

В поле Пространство имен модели установим предпочтительное имя модели и нажмем Готово. После этого Entity Framework сгенерирует модель по базе данных и добавит ее в проект.

Visual Studio отобразит нам схему модели. В моем случае в базе данных есть только одна таблица Users, поэтому на схеме отображается только одна сущность User:

Рисунок 19

19

После выделения сущности в правом нижнем углу Visual Studio мы увидим свойства для этой сущности:

Рисунок 20

Свойство Name в окне свойств указывает на класс, которым будет представлена данная сущность (то есть классом User). А свойство Имя набора сущностей указывает на имя набора объектов (то есть свойство DbSet

контекста данных) - в данном случае Users.

И теперь мы можем взаимодействовать с базой данных. Для этого можно разработать такой же графический пользовательский интерфейс, как на рисунке 8, и добавить в класс формы те же самые методы, которые были созданы для получения данных из БД (листинг 17.3). Единственное исключение – это класс контекста данных. При реализации подхода Database First будем использовать класс userdbEntities, определенный в мастере моделей EDM (Рисунок 16).

§17.6 Model First

Model First представляет еще один подход к работе с Entity Framework.

Суть данного подхода состоит в том, что сначала делается модель, а потом по ней создается база данных.

Итак, создадим новый проект по типу Приложение Windows Forms. И

затем добавим в проект новый элемент. Нажмем правой кнопкой мыши на проект в окне Обозреватель решений и в появившемся списке выберем

Добавить → Создать элемент. И затем в окне добавления нового элемента

выберем Модель ADO.NET EDM:

20