搭建数据库基架会从现有数据库生成 Entity Framework 模型。生成的实体将被创建并映射到指定数据库中的表。有关将 EF Core 与 MySQL 一起使用的要求概述,请参阅 表 7.2,“Connector/NET 版本和 Entity Framework Core 支持”)。
NuGet 包能够为项目选择最佳目标,这意味着 NuGet 会安装与该特定框架版本相关的库。
搭建现有数据库基架有两种不同的方法
本节介绍如何使用这两种方法搭建 sakila
数据库的基架。其他搭建基架的技术包括
有关复制每种搭建基架方法所需的组件,请参阅 EF Core 支持的一般要求。使用包管理器控制台方法时,请确定使用哪个版本的 Visual Studio 适合正在使用的 .NET 或 .NET Core 版本(请参阅 表 2.1,“相关产品的 Connector/NET 要求”)。
要下载 sakila
数据库,请参阅 https://dev.mysqlserver.cn/doc/sakila/en/。
将 ASP.NET Core 应用程序升级到较新的框架时,请确保使用适当的 EF Core 版本(请参阅 https://docs.microsoft.com/en-us/aspnet/core/migration/30-to-31?view=aspnetcore-3.1)。
使用 .NET Core 命令行界面 (CLI) 初始化有效的 .NET Core 项目和控制台应用程序,然后切换到新创建的文件夹(
sakilaConsole
)。dotnet new console –o sakilaConsole
cd sakilaConsole
使用 CLI 添加 EF Core 的 MySQL NuGet 包。例如,使用以下命令添加 MySQL EF Core 7.0 包,以便与 Connector/NET 8.0.33 及更高版本一起使用。
dotnet add package MySql.EntityFrameworkCore --version 7.0.2
添加以下
Microsoft.EntityFrameworkCore.Design
Nuget 包dotnet add package Microsoft.EntityFrameworkCore.Tools
如下所示,还原项目文件中指定的依赖项和项目特定工具
dotnet restore
通过执行以下命令创建 Entity Framework Core 模型。本示例的连接字符串必须包含
database=sakila
。有关使用连接字符串的信息,请参阅 第 4.1 节,“创建 Connector/NET 连接字符串”。注意如果您使用的是早于 Connector/NET 8.0.23 的连接器版本,请将
MySql.EntityFrameworkCore
替换为MySql.Data.EntityFrameworkCore
。dotnet ef dbcontext scaffold "connection-string" MySql.EntityFrameworkCore -o sakila -f
要验证模型是否已创建,请打开新的
sakila
文件夹。您应该会看到与映射到实体的所有表相对应的文件。此外,请查找sakilaContext.cs
文件,其中包含此数据库的DbContext
。
打开 Visual Studio 并为 C# 创建一个新的 控制台应用 (.NET Core)。
使用
添加 EF Core 的 MySQL NuGet 包。例如,使用以下命令添加 MySQL EF Core 7.0 包,以便与 Connector/NET 8.0.33 及更高版本一起使用。Install-Package MySql.EntityFrameworkCore -Version 7.0.2
通过从
菜单中选择 (或 ,然后选择 )来安装以下 NuGet 包:Microsoft.EntityFrameworkCore.Tools
。打开
,并在提示符处输入以下命令,为sakila
数据库创建实体和DbContext
。本示例的连接字符串必须包含database=sakila
。有关使用连接字符串的信息,请参阅 第 4.1 节,“创建 Connector/NET 连接字符串”。注意如果您使用的是早于 Connector/NET 8.0.23 的连接器版本,请将
MySql.EntityFrameworkCore
替换为MySql.Data.EntityFrameworkCore
。Scaffold-DbContext "connection-string" MySql.EntityFrameworkCore -OutputDir sakila -f
Visual Studio 会在项目内部创建一个新的
sakila
文件夹,其中包含映射到实体的所有表以及sakilaContext.cs
文件。
可以在搭建数据库基架时指定要使用的架构中的确切表,并省略其余表。以下命令行示例显示了过滤表所需的参数。本示例的连接字符串必须包含 database=sakila
。
如果您使用的是早于 Connector/NET 8.0.23 的连接器版本,请将 MySql.EntityFrameworkCore
替换为 MySql.Data.EntityFrameworkCore
。
.NET Core CLI
dotnet ef dbcontext scaffold "connection-string" MySql.EntityFrameworkCore -o sakila -t actor -t film -t film_actor -t language -f
Visual Studio 中的包管理器控制台
Scaffold-DbContext "connection-string" MySql.EntityFrameworkCore -OutputDir Sakila -Tables actor,film,language -f
搭建数据库基架时,可以使用多个架构或数据库。请注意,用于连接到 MySQL 服务器的帐户必须有权访问要包含在上下文中的每个架构。
以下命令行示例显示了如何在单个上下文中合并 sakila
和 world
架构。如果您使用的是早于 Connector/NET 8.0.23 的连接器版本,请将 MySql.EntityFrameworkCore
替换为 MySql.Data.EntityFrameworkCore
。
.NET Core CLI
dotnet ef dbcontext scaffold "connection-string" MySql.EntityFrameworkCore -o sakila --schema sakila --schema world -f
Visual Studio 中的包管理器控制台
Scaffold-DbContext "connection-string" MySql.EntityFrameworkCore -OutputDir Sakila -Schemas sakila,world -f