Code First 方法使您能够在代码中定义实体模型,从模型创建数据库,然后将数据添加到数据库中。MySQL Connector/NET 与多个版本的 Entity Framework Core 兼容。有关特定的兼容性信息,请参阅 表 4.4,“连接器/NET 版本和 Entity Framework Core 支持”。
以下示例显示了从现有代码创建数据库的过程。尽管此示例使用 C# 语言,但您可以使用任何 .NET 语言并在 Windows、macOS 或 Linux 上运行生成的应用程序。
为此示例创建一个控制台应用程序。
使用 .NET Core 命令行界面 (CLI) 初始化有效的 .NET Core 项目和控制台应用程序,然后切换到新创建的文件夹 (
mysqlefcore
)。dotnet new console –o mysqlefcore
cd mysqlefcore
MySql.EntityFrameworkCore
使用 dotnet CLI 或 Visual Studio 中 的包管理器控制台 将包添加到应用程序。点网命令行
输入以下命令以添加 MySQL EF Core 6.0 包以与 Connector/NET 8.0.31 及更高版本一起使用。
dotnet add package MySql.EntityFrameworkCore --version 6.0.4
输入以下命令之一以添加 MySQL EF Core 5.0 或 EF Core 3.1 包以用于 Connector/NET 8.0.23 及更高版本。
dotnet add package MySql.EntityFrameworkCore --version 5.0.16 dotnet add package MySql.EntityFrameworkCore --version 3.1.24
对于之前版本的Connector/NET,使用以下命令指定包的版本:
dotnet add package MySql.Data.EntityFrameworkCore --version 8.0.22
包管理器控制台
输入以下命令以添加 MySQL EF Core 6.0 包以与 Connector/NET 8.0.28 及更高版本一起使用。
Install-Package MySql.EntityFrameworkCore -Version 6.0.4
输入以下命令之一以添加 MySQL EF Core 5.0 或 EF Core 3.1 包以用于 Connector/NET 8.0.23 及更高版本。
Install-Package MySql.EntityFrameworkCore -Version 5.0.16 Install-Package MySql.EntityFrameworkCore -Version 3.1.24
对于之前版本的Connector/NET,使用以下命令指定包的版本:
Install-Package MySql.Data.EntityFrameworkCore -Version 8.0.22
恢复项目文件中指定的依赖项和项目特定工具,如下所示:
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 restore
dotnet run
运行应用程序的输出由以下示例表示:
书号:978-0544003415 书名:指环王 出版商:水手图书 书号:978-0547247762 书名:密封的信 出版商:水手图书