ADO.NET Entity Framework (EF) — объектно-ориентированная технология доступа к данным, является object-relational mapping (ORM) решением для .NET Framework от Microsoft.
Предоставляет возможность взаимодействия с объектами как посредством LINQ в виде LINQ to Entities, так и с использованием Entity SQL.
Entity SQL представляет собой язык, подобный языку SQL, который позволяет выполнять запросы к концептуальным моделям в Entity Framework
Для облегчения построения web-решений используется как ADO.NET Data Services (Astoria), так и связка из Windows Communication Foundation и Windows Presentation Foundation, позволяющая строить многоуровневые приложения, реализуя один из шаблонов проектирования MVC, MVP или MVVM.
Релиз ADO.NET Entity Framework состоялся 11 августа 2008 года в составе .NET Framework 3.5 Service Pack 1 и Visual Studio 2008 Service Pack 1.
В VS 2008 вошёл EDM Wizard для реверс-инжиниринга существующих баз данных и EDM Designer для редактирования сгенерированных моделей или создания их с нуля.
Версия 6.0 была выпущена 17 октября 2013 года[3] и сейчас это проект с открытым исходным кодом под лицензией Apache License v2. В версии 6.0 был сделан ряд улучшений в поддержке метода работы Code First.
Начиная с версии Entity Framework 4.1 предоставляется три подхода по проектированию базы данных:
Database-First
Подходит для проектировщиков баз данных — сначала необходимо создать базу данных с помощью различных инструментов (например, SQL Server Management Studio), а затем генерируете EDMX-модель базы данных (предоставляет удобный графический интерфейс для взаимодействия с базой данных в виде диаграмм и объектную модель в виде классов C#).
В данном случае вам нужно работать с SQL Server и хорошо знать синтаксис T-SQL, но при этом не нужно разбираться в C#.
Model-First
Подходит для архитекторов — сначала создается графическая модель EDMX в Visual Studio (в фоновом режиме создаются классы C# модели), а затем генерируете на основе диаграммы EDMX базу данных.
При данном подходе не нужно знать ни деталей T-SQL ни синтаксиса C#.
Code-First
Подходит для программистов — при данном подходе модель EDMX вообще не используется и необходимо вручную настраивать классы C# объектной модели (данный подход поддерживает как генерацию сущностных классов из существующей базы данных, так и создание базы данных из созданной вручную модели объектов C#).
Данный способ подходит для программистов, хорошо знакомых с синтаксисом C#.
Установка Entity Framework
Подключить Entity Framework можно к любому проекту — от Xamarin до ASP.NET.
Для начала создайте проект Console Application в Visual Studio. Затем откройте менеджер пакетов NuGet:
NuGet Manager – это инструмент, который помогает разработчику управлять сторонними библиотеками (пакетами) в своем проекте.
Скачиваем пакет с этим фреймворком:
Скачиваем пакет с этим фреймворком:
При установке соглашаемся с изменениями и лицензией:
Создание первого приложения
Наше приложение будет создано с помощью подхода Code First.
Когда Entity Framework установится, нужно подключиться к СУБД. Это делается с помощью файла конфигурации.
Так как рассматривается консольное приложение, то надо создать и открыть файл App.config (нажимаем правой кнопкой мыши на файл нашего проекта):
В файл App.config необходимо добавить следующий код:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="DBConnection" connectionString="data source=.\SQLEXPRESS;Initial Catalog=GameDB;Integrated Security=True;"
providerName="System.Data.SqlClient"/>
</connectionStrings>
</configuration>
Все подключения к источникам данных устанавливаются в секции connectionStrings, а каждое отдельное подключение представляет элемент add.
В конструкторе класса контекста UserContext мы передаем в качестве названия подключения строку «DbConnection», поэтому данное название указывается в атрибуте name=»DBConnection».
Настройку строки подключения задает атрибут connectionString. В данном случае мы устанавливаем название базы данных, с которой будем взаимодействовать — userstore.
В качестве СУБД мы используем MS SQL Server 2019.
Наше приложение будет посвящено работе с пользователями. Поэтому добавим в проект новый класс User:
В конструкторе класса контекста UserContext мы передаем в качестве названия подключения строку «DbConnection», поэтому данное название указывается в атрибуте name=»DBConnection».
Настройку строки подключения задает атрибут connectionString. В данном случае мы устанавливаем название базы данных, с которой будем взаимодействовать — userstore.
В качестве СУБД мы используем MS SQL Server 2019.
Наше приложение будет посвящено работе с пользователями. Поэтому добавим в проект новый класс User:
using System;
using System.Collections.Generic;
using System.Data.Entity;
namespace consol
{
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
class UserContext : DbContext
{
public UserContext()
: base("DbConnection")
{ }
public DbSet Users { get; set; }
}
}
Это обычный класс, который содержит некоторое количество автосвойств. Каждое свойство будет сопоставляться с отдельным столбцом в таблице из БД.
Основу функциональности Entity Framework составляют классы, находящиеся в пространстве имен System.Data.Entity. Среди всего набора классов этого пространства имен следует выделить следующие:
В любом приложении, работающим с БД через Entity Framework, нам нужен будет контекст (класс производный от DbContext) и набор данных DbSet, через который мы сможем взаимодействовать с таблицами из БД. В данном случае таким контекстом является класс UserContext.
Теперь перейдем к файлу Program.cs и изменим его содержание следующим образом:
Основу функциональности Entity Framework составляют классы, находящиеся в пространстве имен System.Data.Entity. Среди всего набора классов этого пространства имен следует выделить следующие:
- DbContext: определяет контекст данных, используемый для взаимодействия с базой данных.
- DbModelBuilder: сопоставляет классы на языке C# с сущностями в базе данных.
- DbSet/DbSet<TEntity>: представляет набор сущностей, хранящихся в базе данных.
В любом приложении, работающим с БД через Entity Framework, нам нужен будет контекст (класс производный от DbContext) и набор данных DbSet, через который мы сможем взаимодействовать с таблицами из БД. В данном случае таким контекстом является класс UserContext.
Теперь перейдем к файлу Program.cs и изменим его содержание следующим образом:
using System;
namespace consol
{
class Program
{
static void Main(string[] args)
{
using (UserContext db = new UserContext())
{
// создаем два объекта User
User user1 = new User { Name = "Виктор", Age = 24 };
User user2 = new User { Name = "Максим", Age = 25 };
// добавляем их в бд
db.Users.Add(user1);
db.Users.Add(user2);
db.SaveChanges();
Console.WriteLine("Объекты успешно сохранены");
// получаем объекты из бд и выводим на консоль
var users = db.Users;
Console.WriteLine("Список объектов:");
foreach (User u in users)
{
Console.WriteLine("{0}.{1} - {2}", u.Id, u.Name, u.Age);
}
}
Console.Read();
}
}
}
Так как класс UserContext через родительский класс DbContext реализует интерфейс IDisposable, то для работы с UserContext с автоматическим закрытием данного объекта мы можем использовать конструкцию using.
В конструкции using создаются два объекта User и добавляются в базу данных. Для их сохранения нам достаточно использовать метод Add: db.Users.Add(user1)
Чтобы получить список данных из бд, достаточно воспользоваться свойством Users контекста данных: db.Users
В результате после запуска программа выведет на консоль:
В конструкции using создаются два объекта User и добавляются в базу данных. Для их сохранения нам достаточно использовать метод Add: db.Users.Add(user1)
Чтобы получить список данных из бд, достаточно воспользоваться свойством Users контекста данных: db.Users
В результате после запуска программа выведет на консоль:
Таким образом, Entity Framework обеспечивает простое и удобное управление объектами из базы данных. При том в данном случае нам не надо даже создавать базу данных и определять в ней таблицы.
Entity Framework все сделает за нас на основе определения класса контекста данных и классов моделей. И если база данных уже имеется, то Entity Framework не будет повторно создавать ее.
Проверить базу данных можно в обозревателе объектов SQL Server Management Studio:
Entity Framework все сделает за нас на основе определения класса контекста данных и классов моделей. И если база данных уже имеется, то Entity Framework не будет повторно создавать ее.
Проверить базу данных можно в обозревателе объектов SQL Server Management Studio: