Работа с данными в Entity Framework

Подключение Entity Framework Core

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

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

Для работы с Entity Framework вначале создадим новый проект ASP.NET Core по шаблону ASP.NET Core Empty.

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

Добавление Entity Framework Core в проект ASP.NET Core MVC и C#

Далее создадим в проекте папку Models и в нее добавим новый класс, который назовем User:

public class User
{
    public int Id { get; set; }
    public string? Name { get; set; } // имя пользователя
    public int Age { get; set; } // возраст пользователя
}

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

Чтобы взаимодействовать с базой данных через Entity Framework нам нужен контекст данных - класс, унаследованный от класса Microsoft.EntityFrameworkCore.DbContext. Поэтому добавим в папку Models новый класс, который назовем ApplicationContext:

using Microsoft.EntityFrameworkCore;

namespace MvcApp.Models
{
    public class ApplicationContext : DbContext
    {
        public DbSet<User> Users { get; set; } = null!;
        public ApplicationContext(DbContextOptions<ApplicationContext> options)
            : base(options)
        {
            Database.EnsureCreated();   // создаем базу данных при первом обращении
        }
    }
}

Свойство DbSet представляет собой коллекцию объектов, которая сопоставляется с определенной таблицей в базе данных. При этом по умолчанию название свойства должно соответствовать множественному числу названию модели в соответствии с правилами английского языка. То есть User - название класса модели представляет единственное число, а Users - множественное число.

Через параметр options в конструктор контекста данных будут передаваться настройки контекста.

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

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

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=usersdb;Trusted_Connection=True;"
  },
  // остальное содержимое файла
}

В данном случае мы будем использовать упрощенный движок базы данных LocalDB, который представляет легковесную версию SQL Server Express, предназначенную специально для разработки приложений.

И последним шагом в настройке проекта является изменение файла Program.cs:

using Microsoft.EntityFrameworkCore;
using MvcApp.Models;    // пространство имен класса ApplicationContext


var builder = WebApplication.CreateBuilder(args);

// получаем строку подключения из файла конфигурации
string connection = builder.Configuration.GetConnectionString("DefaultConnection");

// добавляем контекст ApplicationContext в качестве сервиса в приложение
builder.Services.AddDbContext<ApplicationContext>(options => options.UseSqlServer(connection));

builder.Services.AddControllersWithViews();

var app = builder.Build();

app.MapDefaultControllerRoute();

app.Run();

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

Получение контекста данных в контроллере

Поскольку выше в приложении контекст данных добавляется в виде сервиса, то в конструкторе контроллера мы можем получить переданный контекст данных. Например, пусть для хранения контроллеров в проекте определена папка Controllers, в которой есть класс контроллера - HomeController:

using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using MvcApp.Models;

namespace MvcApp.Controllers
{
    public class HomeController : Controller
    {
        ApplicationContext db;
        public HomeController(ApplicationContext context)
        {
            db = context;
        }
    }
}

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

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