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.
-
Создайте консольное приложение для этого примера.
-
Инициализируйте действительный проект .NET Core и консольное приложение с помощью командной строки .NET Core (CLI), а затем переключитесь на только что созданную папку (
mysqlefcore).dotnet new console –o mysqlefcorecd mysqlefcore -
Добавьте пакет
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 -
Восстановите зависимости и инструменты, специфичные для проекта, указанные в файле проекта следующим образом:
dotnet restore
-
-
Создайте модель и запустите приложение.
В этом примере модель предназначена для использования консольным приложением. Она состоит из двух сущностей, связанных с библиотекой книг, которые настроены в классе
LibraryContext(или контексте базы данных).-
Создайте новый файл с именем
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; } } } -
Создайте новый файл с именем
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, необходимые столбцы, ссылки и так далее. -
Вставьте следующий код в существующий файл
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()); } } } } } -
Используйте следующие команды CLI для восстановления зависимостей, а затем запустите приложение.
dotnet restoredotnet 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.