Подключитесь к SQL Server с помощью Entity Framework Core

Подключитесь к SQL Server с помощью Entity Framework Core ФСС

Оглавление

Подавляющее большинство динамических сайтов для создания страниц на лету используют для заполнения контент, хранящийся в базе данных. Выбор и получение контента из таблиц базы данных происходит с высокой скоростью независимо от размера файла базы данных.

Сайты построенные на ASP. NET, как, впрочем, и динамические сайты на других платформах и языках, могут использовать различные системы баз данных. Например: MS SQL, MySql, Sqlite, PostgreSQL, Firebird и другие.

В статье речь пойдет о системе баз данных MS SQL Server. Построим взаимодействие с базой данных через драйвер объектно-реляционного сопоставления Entity Framework Core. Практический пример оформлен в виде сайта на платформе ASP. NET MVC и прикреплён в конце статьи.

Модуль Entity Framework Core

Entity Framework Core – технология объектно-ориентированного доступа к данным. При работе с базами данных через модуль EF Core запрошенная таблица преобразуется в экземпляр класса, а столбцы в одноименные свойства. Изменения значений свойств сохраняется в базе данных.

При работе с Entity Framework Core классы модели базы данных сопоставляются таблицам базы. Инкапсуляция реляционных запросов превращает работу с базами данных в «обычное» объектно-ориентированное программирование. В отличие от этого драйверы реляционного доступа, возвращают данные в виде таблицы или параметров, которые требуют дополнительной обработки.

Создание веб приложения ASP. N ET MVC

Последовательность создания веб приложения в MS Visual Studio:

Более подробное описание создания веб приложения ASP. NET Core MVC.

Установка необходимых пакетов NuGet

Для использования возможностей объектно-реляционного сопоставления «объект — база данных» необходима установка приложение пакета Microsoft. EntityFrameworkCore.

Кроме этого, понадобится установка расширений SqlServerDbContextOptionsExtensions. UseSqlServer для этого необходимо в веб приложение добавить пакет Microsoft. EntityFrameworkCore. SqlServer. Это необходимо для настройки контекста и создания строк подключения с помощью построителей.

База данных для исследования


Подключитесь к SQL Server с помощью Entity Framework Core

Создадим базу данных MS SQL. Для этого необходим MS SQL Server или MS SQL Server Express и MS SQL Server Management Studio. Создавать таблицы и связи между ними будем посредством инструмента управления MS SQL Server Management Studio. Базу данных назовем DBMSSQL. Добавим в базу три небольшие таблицы кратко описывающие науки и ее разделы.

Между таблицами неразрывные отношения один-ко-многим (или многие-к-одному), и каждая запись может получить связанную с ней информацию из любой таблицы благодаря мостикам из внешних ключей.

Модель базы данных

Модуль Entity Framework Core осуществляет доступ к базам данных посредством моделей. Модель – классы, определенные в соответствии таблицам базы данных. Entity Framework Core сопоставляет столбец таблицы и одноименное свойство класса соответствующей таблицы данных.

Соответственно таблицам создадим классы модели для базы данных DBMSSQL. Все таблицы в базе имеют одинаковые столбцы Id, Name, NumberViews, Uri. Чтобы уменьшить количество повторного программного кода создадим абстрактный класс с общими свойствами. Далее этот класс унаследуют классы модели базы данных.

Листинг модели базы данных:

Контекст сеанса с базой данных DBContext

Контекст баз данных представляется классом DBContext, необходимым для взаимодействия с базами данных. Объект класса производного от DBContext позволяет выполнять запросы и сохранять изменения, произведенные над свойствами экземпляров модели.

Во время взаимодействия с базой данных класс контекста наполняет классы модели информацией из таблиц базы данных. Сеанс взаимодействия контекста с базой данных краток, и состоит из одного цикла:

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

Листинг класса контекста для взаимодействия с базой данных DBMSSQL:

Строка подключения к SQL серверу

Реквизиты подключения к определенной базе данных, для контекста, указываются в строке подключения (connection string). Строку подключения к MS SQL Server удобно создавать с помощью построителей. Например, с помощью класса SqlConnectionStringBuilder, входящего в состав пространства имён Microsoft. Data. SqlClient (пакет Microsoft. EntityFrameworkCore. SqlServer). Таким способом создаётся синтактически правильная строка подключения к серверу базы данных.

Читайте также:  ФСС в Красной Горбатке на учете

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

Режим проверки подлинности Windows использует имя и пароль пользователя, зарегистрированного в операционной системе. При режиме проверки подлинности SQL Server требуются имя и пароль учетной записи пользователя зарегистрированной на SQL сервере.

Листинг двух вариантов строк подключения к SQL серверу:

Выполнение запросов к базе данных

Подключение к базе данных в веб приложении происходит при создании экземпляра класса контекста SqlDBContext. Экземпляр контекст создаётся в конструкторе контроллера HomeController.

После создания объекта контекста можно выполнять запросы к базе данных. В представления полученная информация передаётся в виде слабо-типизированных ViewBag и строго-типизированных объектов посредством Model.

Представление с моделью

В представлении данные из модели извлекаются оператором перебора коллекции foreach. Код C# внедряется посредством разметки (движка веб страниц) Razor.

Листинг представления с моделью:

Представление с ViewBag

Полученные данные можно передавать в представления динамическими переменными. Слаботипизированная переменная ViewBag может передавать любой объект, и что удобно, не требует приведения типов при присваивании соответствующему объекту.

В нашем случае в представление передаются списки объектов с информацией, полученной из базы данных. Путём перебора элементов списков, используя минимум кода Razor и разметки HTML, информация выводится в браузер в удобочитаемом виде.

Листинг представления с применением динамического свойства ViewBag:

Необходимое для работы с исходником

Файл содержит файл базы данных и исходный код веб приложения ASP. NET Core . NET 5. Перед работой с прикреплённым веб приложением рекомендуется изучить данную статью.

Скачать исходник

Последнее обновление: 25.12.2021

Entity Framework представляет ORM-решение, которое позволяет автоматически связать классы языка C# с таблицами в базе данных. Entity Framework Core
поддерживает большинство популярных СУБД, таких как MS SQL Server, SQLite, MySQL, Postres. В данном случае мы будем работать через Entity Framework Core с базами данных в
MS SQL Server.

Детально ознакомиться с работой с Entity Framework Core можно в соответствуюшем руководстве, здесь же мы сосредоточимся
прежде всего на тех моментах, которые характерны для веб-приложения ASP. NET Core.

Для работы с базами данных MS SQL Server через Entity Framework Core необходим пакет .
По умолчанию он отсутствует в проекте, поэтому его надо добавить, например, через пакетный менеджер Nuget:


Подключитесь к SQL Server с помощью Entity Framework Core

Этот класс представляет те объекты, которые будут храниться в базе данных.

Для взаимодействия с базой данных через Entity Framework Core необходим контекст данных — класс, унаследованный от класса
. Поэтому добавим в проект новый класс, который назовем
(название класса контекста произвольное):

Класс DbSet, как и другие типы, является ссылочным. А, начиная с C# 10 и . NET 6 автоматически применяется функциональность ссылочных
nullable-типов. И переменные/свойства тех типов, которые не являются nullable, следует инициализировать некотором значением перед
их использованием. Чтобы выйти из этой ситуации мы можем инициализировать свойство с помощью выражения , которое говорит, что данное свойство в принципе не будет иметь значение null.
Потому что в реальности конструктор базового класса DbContext гарантирует, что все свойства типа DbSet будут инициализированы и соответственно в принципе не будут иметь значение null.

В конструкторе класса ApplicationContext через параметр options будут передаваться настройки контекста данных.
А в самом конструкторе с помощью вызова Database. EnsureCreated() по определению модели будет создаваться база данных (если она отсутствует).

Конфигурация и строка подключения

Чтобы подключаться к базе данных, нам надо задать параметры подключения. Это можно сделать либо в коде C#, либо в файле конфигурации.
Выберем второй способ. Для этого изменим файл . По умолчанию он содержит только настройки логгирования:

Теперь изменим его, добавив определение строки подключения:

В данном случае мы будем использовать упрощенный движок базы данных LocalDB, который представляет легковесную версию SQL Server Express, предназначенную специально для разработки приложений. Об этом говорит параметр Server=(localdb)\mssqllocaldb. Ну а сама база данных будет
называться applicationdb.

Добавление контекста данных EF Core в качестве сервиса

Контекст данных, через который идет взаимодействие с базой данных, передается в приложение в качестве сервиса через механизм внедрения зависимостей.
Поэтому для работы с Entity Framework Core необходимо добавить класс контекста данных в коллекцию сервисов приложения:

Читайте также:  Места обращения за получением услуги, телефоны, режим работы -

Для использования контекста данных ему надо передать строку подключения, которая выше была определена в файл конфигурации appsettings.json. Поэтому сначала считываем
строку подключения под названием «DefaultConnection»:

string connection = builder. Configuration. GetConnectionString(«DefaultConnection»);

Для получения строки конфигурации для объекта IConfiguration, который представляет конфигурацию, определен метод расширения ,
в который передается название строки подключения.

Для добавления контекста данных в качестве сервиса у объекта коллекции сервисов IServiceCollection определен метод , который типизируется
классом контекста данных:

Этот метод в качестве параметра принимает делегат, который настраивает подключение. В частности, с помощью вызова options. UseSqlServer()
настраивается подключение к серверу MS SQL Server, а в качестве параметра в этот вызов передается строка подключения.

Обращение к базе данных

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

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


Подключитесь к SQL Server с помощью Entity Framework Core

Подключение к существующей базе данных

Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core 7

Последнее обновление: 14.11.2020

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

Для подключения к существующей базе данных создадим новый проект. Как и в прошлой теме это будет проект по типу Console App (. NET Core),
который назовем FirstApp.


Подключитесь к SQL Server с помощью Entity Framework Core

Для работы с существующей БД MS SQL Server нам надо добавить два пакета:


Подключитесь к SQL Server с помощью Entity Framework Core

Подключитесь к SQL Server с помощью Entity Framework Core

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

Однако добавление классов вручную имеет свои недостатки. Так, если база данных имеет не одну, а множество таблиц, связанных различными ключами, то
у нас может возникнуть проблема, как все эти отношения отобразить между класса на C#. Ну и кроме того, это просто долго и может занять некоторое время.

Далее в Package Manager Console выполним следующую команду:

Scaffold-DbContext «Server=(localdb)mssqllocaldb;Database=helloappdb;Trusted_Connection=True;» Microsoft. EntityFrameworkCore. SqlServer

Здесь в качестве параметра команде Scaffold-DbContext передается строка подключения с указанием сервера и названием базы данных.


Подключитесь к SQL Server с помощью Entity Framework Core

И также будет добавлен класс контекста данных, который будет называться по имени базы данных плюс суффикс «Context»:

И после генерации данных классов мы сможем работать с базой данных. Для этого изменим код класса Program:

Последнее обновление: 14.11.2022

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


Подключитесь к SQL Server с помощью Entity Framework Core

Для работы с существующей БД SQLite нам надо добавить два пакета:


Подключитесь к SQL Server с помощью Entity Framework Core

Для решения этих проблем в Entity Framework Core предусмотрена функция , которая позволяет автоматически создать все
необходимые классы по базе данных.

Для реверса базы данных и создания по ней классов C# в Visual Studio в окне Package Manager Console
выполняется следующая команда:

Scaffold-DbContext «строка подключения» провайдер_бд

Здесь в качестве параметра команде Scaffold-DbContext передается строка подключения и далее через пробел название провайдера.
Мы можем использовать различные системы баз данных, но принцип будет один и тот же: после Scaffold-DbContext указывается строка подключения и соответствующий провайдер.

Если мы работаем вне Visual Studio и используем . NET CLI, то выполняется следующая команда

dotnet ef dbcontext scaffold «строка подключения» провайдер_бд

Scaffold-DbContext «Data Source=D:\helloapp.db» Microsoft. EntityFrameworkCore. Sqlite


Подключитесь к SQL Server с помощью Entity Framework Core

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

Список объектов:
1. Tom — 33
2. Alice — 26

Работа с базами данных в . NET Framework — Entity Framework 6 — Простое приложение

Лучшим способом начать обучение Entity Framework будет создание простого примера. Мы будем использовать подход Model-First при котором сначала создается графическая модель данных EDMX, а затем создаются объекты в базе данных. Подход Model-First имеет преимущество — он позволяет абстрагироваться от работы с базой данных и кодом C#, и заниматься непосредственно вопросами моделирования.

Читайте также:  Прирост выплат по больничному листу

В качестве тестового проекта мы используем шаблон ASP. NET Empty Web Application – пустое приложение ASP. NET. Мы создадим модель, необходимую для работы с базой данных на сервере SQL Server Express, который входит в состав Visual Studio, а затем используем эту модель для создания функционального приложения.

Использование мастера EDM для создания модели

Первым шагом является создание модели базы данных. Это можно выполнить несколькими способами, но самым простым является использование инструмента Entity Data Model Wizard, который сделает всю “грязную” работу за вас. Для этого следуйте показанным ниже инструкциям:

В окне Solution Explorer вы можете видеть созданный файл Model1.edmx, в котором, как было показано в предыдущей статье, описываются рабочий, удаленный и связующий слои архитектуры Entity Framework на языках CSDL, SSDL и MDL, основанных на синтаксисе XML, но имеющих различную семантику.

Использование дизайнера EDM

После создания модели данных в приложении, на рабочую область дизайнера EDM (которая открывается автоматически для файлов EDMX) можно добавлять различные элементы из панели Toolbox, графически описывающие структуру данных модели. Например, вы можете добавить элемент Entity, создающий новую сущность:


Подключитесь к SQL Server с помощью Entity Framework Core

В качестве примера, давайте добавим простую сущность, описывающую покупателя в интернет-магазине и содержащую простые поля:

Для это выполните следующие шаги:

Обратите внимание, что цвет объекта сущности в окне дизайнера по умолчанию синий. В сложных моделях иногда бывает полезным окрашивать некоторые элементы в другой цвет, чтобы различать их. Для этого вы можете выделить нужный объект в окне дизайнера EDM и изменить его свойство Fill Color на панели Properties.

Связь модели с базой данных

К данному моменту мы создали простую модель, которую можем применить в нашем приложении, но мы не привязали ее к реальной базе данных. Чтобы убедиться в этом, щелкните правой кнопкой мыши по объекту Customer и выберите в контекстном меню пункт Validate. Visual Studio отобразит ошибку в окне ErrorList:

Error 11007: Entity type ‘Customer’ is not mapped.

Итак, нам нужно связать созданную модель с физической базой данных. Т.к. базы данных еще не существует на SQL Server, ее можно будет сгенерировать из нашей модели с использованиям средств Visual Studio (это еще одна сторона процесса разработки с использованием Model-First – сначала мы создали модель, а затем, на ее основе создаем базу данных). Для этого выполните следующие шаги:

Обратите внимание как Visual Studio облегчает вам жизнь – не нужно вручную работать с базами данных и придумывать SQL-код для создания таблиц, нужно сделать всего пару кликов в дизайнере EDM и настроить подключение при создании базы данных.

Работа с данными

Теперь у нас есть база данных, сгенерированная из модели EDMX и мы можем продемонстрировать работу Entity Framework на примере нашего приложения ASP. NET. Для этого выполните следующие шаги:

Итак, с помощью нескольких строк кода, мы получили полнофункциональное приложение, позволяющее выполнять простые операции для работы с базой данных. Фактически, при разработке данного примера, я потратил куда больше времени на создание разметки элемента управления ListView, нежели чем на код методов-обработчиков событий. Это и является одной из самых привлекательных сторон Entity Framework, если бы я писал код на классическом ADO. NET, у меня бы ушла уйма времени на написание кода доступа к данным, составление SQL-команд и т.д.

Entity Framework позволяет создавать приложения баз данных с использованием компактного кода, потому что Entity Framework основан на модели хранения и отображения базы данных на автоматически сгенерированные классы, которые приложение может использовать для доступа к базе данных. Использование Entity Framework резко увеличивает продуктивность разработки и снижает появление возможных ошибок в коде доступа к данным.

Кроме того, изменения, сделанные разработчиком в модели EDMX автоматически отображаются на базу данных и наоборот, изменения сделанные в базе данных, например администратором, отображаются на модели EDMX (этот момент мы не рассмотрели выше, в дизайнере EDM вы можете щелкнуть правой кнопкой мыши по нужному объекту и выбрать в контекстном меню пункт Update Model from Database для обновления модели из базы данных). Эти возможности появляются за счет автоматизации процесса отображения данных на объектную модель приложения (с помощью средств Visual Studio).

Оцените статью
ФСС Help
Добавить комментарий