Работа с MySQL .Net EntityFramework

Работа с MySQL .Net EntityFramework

Работа с MySQL .Net EntityFramework

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

Предполагается, что у Вас уже установлена и настроена одна из сред разработки для C#, будь-то
Visual Studio, JetBrains Rider или VSCode c плагинами
. Поэтому данный вопрос не рассматривается.

Итак, для работы с MySQL из C# нам нужна дополнительная библиотека под названием Pomelo.EntityFrameworkcore.Mysql,
которая до безобразия просто устанавливается из репозитория пакетов Nuget.

После установки пакетов приступим к написанию кода.

Базовый класс отвечающий за установку и настройку соединения с базой данных



using Microsoft.EntityFrameworkCore;



namespace Net6MySQL

{

    public sealed class ApplicationContext : DbContext

    {

        // все пользователи будут извлекаться через это свойство

        public DbSet<User>? Users { get; set; }





        public ApplicationContext()

        {

            Database.EnsureCreated();

        }





        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)

        {

            // настройка подключения к базе данных

            optionsBuilder.UseMySql(

                "server=localhost;user=user1;password=pasword1;database=magazin;", 

                new MySqlServerVersion(new Version(8, 0, 22))

            );

        }

    }

}



Класс User.cs — описывает наш модель — пользователя



using System.ComponentModel.DataAnnotations.Schema;

using Microsoft.EntityFrameworkCore;





namespace Net6MySQL

{

    // указываем название нашей таблицы в базе

    [Table("users_table")]

    // данный атрибут говорит, что у таблицы нет поля Id (в данном случае) - инкрементального идентификатора

    [Keyless]

    public class User

    {

        // описываем поля таблицы

        public string? SSN { get; set; }

        public string? Name { get; set; }

        public string? Birth { get; set; }

        public string? Country { get; set; }

        public string? City { get; set; }

        public string? Street { get; set; }

        public string? House { get; set; }

        public string? Flat { get; set; }





        public override string ToString()

        {

            return $"{nameof(SSN)}: {SSN}, {nameof(Name)}: {Name}, {nameof(Birth)}: {Birth}, {nameof(Country)}: {Country}, " +

                   $"{nameof(City)}: {City}, {nameof(Street)}: {Street}, {nameof(House)}: {House}, {nameof(Flat)}: {Flat}";

        }

    }

}



Класс UserRepository — отвечает за извлечение информации из базы данных и ее сохранения



using Microsoft.EntityFrameworkCore;



namespace Net6MySQL

{

    public class UserRepository

    {

        private readonly ApplicationContext _dbContext;



        // принимает ранее созданный и настроенный контекст базы данных

        public UserRepository(ApplicationContext dbContext)

        {

            _dbContext = dbContext;

        }



        // извлекает всех пользователей из базы данных

        public List<User>? GetUsers()

        {

            return _dbContext.Users?.ToList();

        }



        // возвращает пользователя по его SSN

        public User? GetUserBySSN(string ssn)

        {

            return _dbContext.Users?.FirstOrDefault(user => user.SSN != null && user.SSN.Contains(ssn));

        }





        // поиск пользователя по имени

        public List<User>? GetUsersByName(string name)

        {

            return _dbContext.Users?.Where(user => user.Name != null && EF.Functions.Like(user.Name, $"%{name}%")).ToList();

        }



    }

}



Файл Program.cs — непосредственно использует ранее определенные классы



namespace Net6MySQL

{



    public static class Program

    {

        public static void Main(string[] args)

        {

            // получаем подключение к БД MySQL

            using var db = new ApplicationContext();



            // создаем репозиторий пользователя

            var repo = new UserRepository(db);



            // извлекаем пользователя

            var user = repo.GetUserBySSN("0000000000");

            if(user != null) Console.WriteLine(user);



            var users1 = repo.GetUsersByName("Doe");



            if (users1 == null) return;



            foreach (var user1 in users1)

            {

                Console.WriteLine(user1);

            }

        }

    }



}





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

Источник

НЕТ КОММЕНТАРИЕВ

Оставить комментарий