Spec-Zone.ru › MySQL Connectors 1.0

7.2.1 Создание базы данных с помощью Code First в EF Core

Подход Code First позволяет определить модель сущностей в коде, создать базу данных на основе модели и затем добавить данные в базу данных. MySQL Connector/NET совместим с несколькими версиями Entity Framework Core. Более подробную информацию о совместимости см. в таблице 7.2 «Версии Connector/NET и поддержка Entity Framework Core».

Следующий пример демонстрирует процесс создания базы данных из существующего кода. Хотя в этом примере используется язык C#, вы можете использовать любой язык .NET и запустить полученное приложение на Windows, macOS или Linux.

  1. Создайте консольное приложение для этого примера.

    1. Инициализируйте действительный проект .NET Core и консольное приложение с помощью командной строки .NET Core (CLI), а затем переключитесь на только что созданную папку (mysqlefcore).

      dotnet new console –o mysqlefcore
      
      cd mysqlefcore
      
    2. Добавьте пакет MySql.EntityFrameworkCore в приложение, используя dotnet CLI или Консоль диспетчера пакетов в Visual Studio.

      dotnet CLI

      Введите следующую команду для добавления пакета MySQL EF Core 7.0 для использования с Connector/NET 8.0.33 и более поздними версиями.

      dotnet add package MySql.EntityFrameworkCore --version 7.0.2
      

      Консоль диспетчера пакетов

      Введите следующую команду для добавления пакета MySQL EF Core 7.0 для использования с Connector/NET 8.0.33 и более поздними версиями.

      Install-Package MySql.EntityFrameworkCore -Version 7.0.2
      
    3. Восстановите зависимости и инструменты, специфичные для проекта, указанные в файле проекта следующим образом:

      dotnet restore
      
  2. Создайте модель и запустите приложение.

    В этом примере модель предназначена для использования консольным приложением. Она состоит из двух сущностей, связанных с библиотекой книг, которые настроены в классе LibraryContext (или контексте базы данных).

    1. Создайте новый файл с именем LibraryModel.cs, а затем добавьте следующие классы Book и Publisher в пространство имен mysqlefcore.

      namespace mysqlefcore
      {
        public class Book
        {
          public string ISBN { get; set; }
          public string Title { get; set; }
          public string Author { get; set; }
          public string Language { get; set; }
          public int Pages { get; set; }
          public virtual Publisher Publisher { get; set; }
        }
      
        public class Publisher
        {
          public int ID { get; set; }
          public string Name { get; set; }
          public virtual ICollection<Book> Books { get; set; }
        }
      }
      
    2. Создайте новый файл с именем LibraryContext.cs и добавьте приведенный ниже код. Замените универсальную строку подключения на подходящую для вашей конфигурации MySQL-сервера.

      Примечание

      Пространство имен MySQL.EntityFrameworkCore.Extensions относится к Connector/NET 8.0.23 и более поздним версиям. Более ранние версии коннектора требуют пространства имен MySQL.Data.EntityFrameworkCore.Extensions.

      using Microsoft.EntityFrameworkCore;
      using MySQL.EntityFrameworkCore.Extensions;
      
      namespace mysqlefcore
      {
        public class LibraryContext : DbContext
        {
          public DbSet<Book> Book { get; set; }
      
          public DbSet<Publisher> Publisher { get; set; }
      
          protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
          {
            optionsBuilder.UseMySQL("server=localhost;database=library;user=user;password=password");
          }
      
          protected override void OnModelCreating(ModelBuilder modelBuilder)
          {
            base.OnModelCreating(modelBuilder);
      
            modelBuilder.Entity<Publisher>(entity =>
            {
              entity.HasKey(e => e.ID);
              entity.Property(e => e.Name).IsRequired();
            });
      
            modelBuilder.Entity<Book>(entity =>
            {
              entity.HasKey(e => e.ISBN);
              entity.Property(e => e.Title).IsRequired();
              entity.HasOne(d => d.Publisher)
                .WithMany(p => p.Books);
            });
          }
        }
      }
      

      Класс LibraryContex содержит сущности для использования и позволяет настроить определенные атрибуты модели, такие как Key, необходимые столбцы, ссылки и так далее.

    3. Вставьте следующий код в существующий файл Program.cs, заменив стандартный C# код.

      using Microsoft.EntityFrameworkCore;
      using System;
      using System.Text;
      
      namespace mysqlefcore
      {
        class Program
        {
          static void Main(string[] args)
          {
            InsertData();
            PrintData();
          }
      
          private static void InsertData()
          {
            using(var context = new LibraryContext())
            {
              // Creates the database if not exists
              context.Database.EnsureCreated();
      
              // Adds a publisher
              var publisher = new Publisher
              {
                Name = "Mariner Books"
              };
              context.Publisher.Add(publisher);
      
              // Adds some books
              context.Book.Add(new Book
              {
                ISBN = "978-0544003415",
                Title = "The Lord of the Rings",
                Author = "J.R.R. Tolkien",
                Language = "English",
                Pages = 1216,
                Publisher = publisher
              });
              context.Book.Add(new Book
              {
                ISBN = "978-0547247762",
                Title = "The Sealed Letter",
                Author = "Emma Donoghue",
                Language = "English",
                Pages = 416,
                Publisher = publisher
              });
      
              // Saves changes
              context.SaveChanges();
            }
          }
      
          private static void PrintData()
          {
            // Gets and prints all books in database
            using (var context = new LibraryContext())
            {
              var books = context.Book
                .Include(p => p.Publisher);
              foreach(var book in books)
              {
                var data = new StringBuilder();
                data.AppendLine($"ISBN: {book.ISBN}");
                data.AppendLine($"Title: {book.Title}");
                data.AppendLine($"Publisher: {book.Publisher.Name}");
                Console.WriteLine(data.ToString());
              }
            }
          }
        }
      }
      
    4. Используйте следующие команды CLI для восстановления зависимостей, а затем запустите приложение.

      dotnet restore
      
      dotnet run
      

Вывод после запуска приложения представлен в следующем примере:

ISBN: 978-0544003415
Title: The Lord of the Rings
Publisher: Mariner Books

ISBN: 978-0547247762
Title: The Sealed Letter
Publisher: Mariner Books

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/connector-net-en/connector-net-entityframework-core-example.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API