Данное руководство устарело. Актуальное руководство: Руководство по Entity Framework Core 7
Платформу Entity Framework Core можно применять в различных технологиях стека .NET. В данном случае мы будем рассматривать базовые моменты платформы на примере консольных приложений, как наиболее простых и не содержащих никакого лишнего кода. Но в последствии также затронем применение EF Core и в других технологиях на конкретных примерах.
Итак, создадим первое приложение с использованием Entity Framework Core. Для этого создадим в Visual Studio 2019 новый проект по типу Console App (.NET Core), который назовем HelloApp:
Итак, Visual Studio создает проект с базовой примитивной структурой, где можно выделить собственно файл логики приложения - файл Program.cs. И чтобы начать работать с EntityFramework Core, нам необходимо вначале добавить в проект пакет EntityFramework Core. Для этого перейдем в проекте к пакетному менеджеру NuGet.
Однако здесь мы ищем не общий пакет для Entity Framework Core, а пакет для конкретной СУБД. Так, в данном случае мы будем использовать MS SQL Server в качестве СУБД, поэтому нам надо искать пакет Microsoft.EntityFrameworkCore.SqlServer:
В качестве альтернативы для добавления пакетов можно использовать Package Manager Console. Для этого в меню Visual Studio перейдем к пункту Tools -> NuGet Package Manager -> Package Manager Console
В открывшемся внизу в Visual Studio окне Package Manager Console введем команду:
Install-Package Microsoft.EntityFrameworkCore.SqlServer
После выполнения этой команды выполним вторую команду:
Install-Package Microsoft.EntityFrameworkCore.Tools
Итак, необходимые пакеты добавлены. Теперь мы можем их использовать.
Далее нам надо определить модель, которая будет описывать данные. Пусть наше приложение будет посвящено работе с пользователями. Поэтому добавим в проект новый класс User:
public class User { public int Id { get; set; } public string Name { get; set; } public int Age { get; set; } }
Это обычный класс, который содержит несколько свойств. Каждое свойство будет сопоставляться с отдельным столбцом в таблице из бд.
Надо отметить, что Entity Framework требует определения ключа элемента для создания первичного ключа в таблице в бд. По умолчанию при генерации бд EF в качестве первичных ключей будет рассматривать свойства с именами Id или [Имя_класса]Id (то есть UserId).
Взаимодействие с базой данных в Entity Framework Core происходит посредством специального класса - контекста данных. Поэтому добавим в наш проект новый класс, который назовем ApplicationContext и который будет иметь следующий код:
using Microsoft.EntityFrameworkCore; namespace HelloApp { public class ApplicationContext : DbContext { public DbSet<User> Users { get; set; } public ApplicationContext() { Database.EnsureCreated(); } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { optionsBuilder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=helloappdb;Trusted_Connection=True;"); } } }
Основу функциональности Entity Framework Core для работы с MS SQL Server составляют классы, которые располагаются в пространстве имен Microsoft.EntityFrameworkCore. Среди всего набора классов этого пространства имен следует выделить следующие:
DbContext: определяет контекст данных, используемый для взаимодействия с базой данных
DbSet/DbSet<TEntity>: представляет набор объектов, которые хранятся в базе данных
DbContextOptionsBuilder: устанавливает параметры подключения
В любом приложении, работающим с БД через Entity Framework, нам нужен будет контекст (класс производный от DbContext). В данном случае таким контекстом является класс ApplicationContext.
И также в классе определено одно свойство Users, которое будет хранить набор объектов User. В классе контекста данных набор объектов представляет
класс DbSet<T>
. Через это свойство будет осуществляться связь с таблицей объектов User в бд.
Кроме того, для настройки подключения нам надо переопределить метод OnConfiguring. Передаваемый в него параметр класса DbContextOptionsBuilder
с помощью метода UseSqlServer
позволяет настроить строку подключения для соединения с MS SQL Server. В данном случае мы определяем, что в качестве
сервера будет использоваться движок localdb, который предназначен специально для разработки, ("Server=(localdb)\\mssqllocaldb"
),
а файл базы данных будет называться helloappdb ("Database=helloappdb"
).
И также стоит отметить, что по умолчанию у нас нет базы данных. Поэтому в конструкторе класса контекста определен вызов метода Database.EnsureCreated()
,
который при создании контекста автоматически проверит наличие базы данных и, если она отсуствует, создаст ее.
Теперь определим сам код программы, который будет взаимодействовать с созданной БД. Для этого изменим класс Program следующим образом:
using System; using System.Linq; namespace HelloApp { public class Program { public static void Main(string[] args) { using (ApplicationContext db = new ApplicationContext()) { // создаем два объекта User User user1 = new User { Name = "Tom", Age = 33 }; User user2 = new User { Name = "Alice", Age = 26 }; // добавляем их в бд db.Users.Add(user1); db.Users.Add(user2); db.SaveChanges(); Console.WriteLine("Объекты успешно сохранены"); // получаем объекты из бд и выводим на консоль var users = db.Users.ToList(); Console.WriteLine("Список объектов:"); foreach (User u in users) { Console.WriteLine($"{u.Id}.{u.Name} - {u.Age}"); } } Console.Read(); } } }
Так как класс ApplicationContext через базовый класс DbContext реализует интерфейс IDisposable
, то для работы с ApplicationContext с
автоматическим закрытием данного объекта мы можем использовать конструкцию using
.
В конструкции using
создаются два объекта User и добавляются в базу данных. Для их сохранения нам достаточно использовать метод Add
:
db.Users.Add(user1)
Чтобы получить список данных из бд, достаточно воспользоваться свойством Users контекста данных: db.Users
В результате после запуска программа выведет на консоль:
Объекты успешно сохранены Список объектов: 1.Tom - 33 2.Alice - 26
И после добавления мы можем найти базу данных в окне SQL Server Object Explorer (открыть данное окно можно через меню View->SQL Server Object Explorer). Там мы можем раскрыть и посмотреть содержимое ее таблиц:
Таким образом, Entity Framework Core обеспечивает простое и удобное управление объектами из базы данных. При том в данном случае нам не надо даже создавать базу данных и определять в ней таблицы. Entity Framework все сделает за нас на основе определения класса контекста данных и классов моделей. И если база данных уже имеется, то EF не будет повторно создавать ее.