Первое приложение на EF Core

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

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

Платформу Entity Framework Core можно применять в различных технологиях стека .NET. В данном случае мы будем рассматривать базовые моменты платформы на примере консольных приложений, как наиболее простых и не содержащих никакого лишнего кода. Но в последствии также затронем применение EF Core и в других технологиях на конкретных примерах.

Итак, создадим первое приложение с использованием Entity Framework Core. Для этого создадим в Visual Studio 2019 новый проект по типу Console App (.NET Core), который назовем HelloApp:

Первое приложение на Entity Framework Core Создание первого приложения на Entity Framework Core 5

Итак, Visual Studio создает проект с базовой примитивной структурой, где можно выделить собственно файл логики приложения - файл Program.cs. И чтобы начать работать с EntityFramework Core, нам необходимо вначале добавить в проект пакет EntityFramework Core. Для этого перейдем в проекте к пакетному менеджеру NuGet.

Однако здесь мы ищем не общий пакет для Entity Framework Core, а пакет для конкретной СУБД. Так, в данном случае мы будем использовать MS SQL Server в качестве СУБД, поэтому нам надо искать пакет Microsoft.EntityFrameworkCore.SqlServer:

Microsoft.EntityFrameworkCore.SqlServer и начало работы с EntityFramework Core 5

В качестве альтернативы для добавления пакетов можно использовать 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). Там мы можем раскрыть и посмотреть содержимое ее таблиц:

Создание базы данных в EF Core

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850