EF провайдеры баз данных - MySQL

  • Михаил
  • 12 мин. на прочтение
  • 131
  • 15 Nov 2022
  • 15 Nov 2022

На данный момент для работы с MySQL имеется несколько провайдеров, но в данном случае мы будем использовать провайдер Pomelo.EntityFrameworkCore.MySql от Pomelo Foundation Project. Стоит отметить, что на данный момент (18 ноября 2020) для версии EF Core он пока в предрелизном состоянии, поэтому мы будем использовать предрелизную версию.

Для подключения к MySQL создадим новый консольный проект .NET Core и добавим через Nuget пакет Pomelo.EntityFrameworkCore.MySql:

Стоит отметить, что также есть официальный провайдер от Oracle - MySql.Data.EntityFrameworkCore, но он развивается довольно медленно (на данный момент не поддерживает EF Core 5.x), кроме того, не имеет поддержки ряда функционала.

Для работы определим модель User:

public class User
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }
}

И также определим контекст данных - класс ApplicationContext:

using Microsoft.EntityFrameworkCore;
namespace MySQLApp
{
    public class ApplicationContext : DbContext
    {
        public DbSet<User> Users { get; set; }
        public ApplicationContext()
        {
            Database.EnsureCreated();
        }
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseMySql(
                "server=localhost;user=root;password=12345678;database=usersdb5;",
                new MySqlServerVersion(new Version(8, 0, 11))
            );
        }
    }
}

Для работы с MySQL вызывается метод UseMySql(), в который передается строка подключения. В строке подключения указываются адрес сервера (параметр server), имя пользователя в СУБД (User), его пароль (Password) и имя базы данных (Database).

В качестве второго параметра передается номер версии MySQL в виде объекта MySqlServerVersion - в его конструктор передается объект Version, который собственно содержит номер установленной версии MySQL. Например, в моем случае это версия 8.0.11, соответственно я передаю объект new MySqlServerVersion(new Version(8, 0, 11)).

И для тестирования определим в файле Program.cs добавление и вывод данных:

using System;
using System.Linq;
namespace MySQLApp
{
    class Program
    {
        static void Main(string[] args)
        {
            // добавление данных
            using (ApplicationContext db = new ApplicationContext())
            {
                User user1 = new User { Name = "Tom", Age = 33 };
                User user2 = new User { Name = "Alice", Age = 26 };
                db.Users.AddRange(user1, user2);
                db.SaveChanges();
            }
            // получение данных
            using (ApplicationContext db = new ApplicationContext())
            {
                var users = db.Users.ToList();
                Console.WriteLine("Список объектов:");
                foreach (User u in users)
                {
                    Console.WriteLine($"{u.Id}.{u.Name} - {u.Age}");
                }
            }
        }
    }
}

Результат программы:

Объекты успешно сохранены Список объектов: 1.Tom - 33 2.Alice - 26