Skip to content

Entity Framework

Pro100Chel22 edited this page Dec 27, 2023 · 2 revisions

Что такое Entity Framework?

Entity Framework (EF) — это платформа ORM (Object-Relational Mapping) с открытым исходным кодом для приложений .NET, поддерживаемая Microsoft. EF упрощает автоматического сопоставление объектов вашего программного обеспечения с таблицами и столбцами реляционной базы данных. Это позволяет разработчикам работать с данными, используя объекты предметно-ориентированных классов, не сосредотачиваясь на базовых таблицах и столбцах базы данных, в которых хранятся эти данные. Он заботится о создании подключений к базе данных и выполнении команд, а также о получении результатов запросов и автоматической материализации этих результатов в качестве объектов вашего приложения. Это также помогает отслеживать изменения в этих объектах, и при получении инструкций он также сохраняет эти изменения обратно в базу данных для вас.

Entity Framework поддерживает различные системы управления базами данных, такие как Microsoft SQL Server, Oracle, MySQL, PostgreSQL и другие. Это позволяет создавать приложения, работающие с разными базами данных, используя общий код.

Отличительной чертой Entity Framework является использование запросов LINQ для выборки данных из БД. С помощью LINQ мы можем не только извлекать определенные строки, хранящие объекты, из бд, но и получать объекты, связанные различными ассоциативными связями.

Entity Framework позволяет автоматизировать процесс изменения схемы базы данных с помощью механизма миграций. Это упрощает обновление базы данных при изменениях в модели данных.

Как подключить к проекту Entity Framework?

Первым делом нужно скачать необходимые пакеты с помощью Nuget. Первые три из них можно увидеть на картинке ниже. Последний пакет необходимо выбирать в зависимости от той СУБД, которую вы хотите использовать, в данном случае это PostgreSQL. image

Следующим шагом является создание контекста БД. В примере ниже это класс ApplicationDbContext, который наследуются от DbContext.

public class ApplicationDbContext : DbContext
{
    public DbSet<User> Users { get; set; }

    public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options) { }
}

Далее идет модель User, которая добавляется в контекст БД в примере выше.

public class User
{
    public Guid Id { get; set; }
    public string FullName { get; set; }
}

Предпоследним шагом является добавление стрики подключения ConnectionStrings в appsettings.json. В поле DefaultConnection указывается сама строка подключения. Отметим, что вместо DefaultConnection может быть другое название.

 "ConnectionStrings": {
   "DefaultConnection": "Server=localhost;Port=5432;Database=DevelopDB;User Id=postgres;Password=root;"
 }

И в заключительном шаге в файле Program.cs мы добавляем наш контекст БД в сервисы приложения. Обратите внимание на options.UseNpgsql(connectionString), если вы используете другую СУБД, то вместо UseNpgsql будет другой метод.

var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
builder.Services.AddDbContext<ApplicationDbContext>(options => options.UseNpgsql(connectionString));

Как получить контекст БД?

Ниже представлен пример того, как можно получить наш контекст БД в каком-то классе (вожно, чтобы этот класс был добавлен в сервисы приложения), тогда с помощью Dependency Injection контекст БД передастся в конструктор нашего класса.

public class Test
{
    private readonly ApplicationDbContext _context;

    public UserRepository(ApplicationDbContext context)
    {
        _context = context;
    }
}

Также это можно сделать следующим способом.

using var serviceScope = app.Services.CreateScope();
var dbContext = serviceScope.ServiceProvider.GetService<TestContext>();

Как работать с миграциями?

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

Чтобы воспользоваться этим инструментом, нужно открыть Консоль диспетчера пакетов (ДП), который можно найти в Сердства>>Диспетчер пакетов NuGet>>Консоль диспетчера пакетов.

image

Далее в открывшейся консоли ДП, нужно прописать "add-migration your_name". После этого у вас появится папка Migration, где будет находится ваша миграция. Открыв файл с миграцией, вы можете проверить правильно ли были созданы метода для внесения изменения в БД.

image

И когда вы убедились, что Entity Framework понял вас правильно, нужно применить миграцию с помощью команды "update-database". Так же если есть нужда вернуться к какой-то миграции, нужно прописать "update-database migration_name", обратите внимание, что имя должно быть то, что имеет файл с миграцией.

Clone this wiki locally