7.2.2 在 EF Core 中搭建现有数据库

脚手架数据库从现有数据库生成实体框架模型。生成的实体被创建并映射到指定数据库中的表。有关将 EF Core 与 MySQL 一起使用的要求的概述,请参阅 表 7.2,“连接器/NET 版本和 Entity Framework Core 支持”)。

NuGet 包能够为项目选择最佳目标,这意味着 NuGet 会安装与该特定框架版本相关的库。

有两种不同的方法来构建现有数据库:

本节介绍如何sakila 使用这两种方法构建数据库。其他脚手架技术是:

要求

有关重现每种脚手架方法所需的组件,请参阅 EF Core 支持的一般要求。使用包管理器控制台方法,确定哪个版本的 Visual Studio 被推荐用于正在使用的 .NET 或 .NET Core 版本(请参阅 表 2.1,“相关产品的连接器/NET 要求”)。

要下载sakila数据库,请参阅 https://mysql.net.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 搭建数据库

  1. 使用 .NET Core 命令行界面 (CLI) 初始化有效的 .NET Core 项目和控制台应用程序,然后切换到新创建的文件夹 ( sakilaConsole)。

    dotnet new console –o sakilaConsole
    cd sakilaConsole
  2. 使用 CLI 为 EF Core 添加 MySQL NuGet 包。例如,使用以下命令添加 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
  3. 添加以下 Microsoft.EntityFrameworkCore.DesignNuget 包:

    dotnet add package Microsoft.EntityFrameworkCore.Tools
  4. 恢复项目文件中指定的依赖项和项目特定工具,如下所示:

    dotnet restore
  5. 通过执行以下命令创建 Entity Framework Core 模型。此示例的连接字符串必须包含database=sakila. 有关使用连接字符串的信息,请参阅 第 4.1 节 “创建连接器/NET 连接字符串”

    笔记

    如果您使用的连接器版本早于 Connector/NET 8.0.23,请替换MySql.EntityFrameworkCoreMySql.Data.EntityFrameworkCore.

    dotnet ef dbcontext scaffold "connection-string" MySql.EntityFrameworkCore -o sakila -f

    要验证模型是否已创建,请打开新 sakila文件夹。您应该看到对应于映射到实体的所有表的文件。此外,查找sakilaContext.cs包含DbContext此数据库的文件。

在 Visual Studio 中使用包管理器控制台搭建数据库

  1. 打开 Visual Studio 并为 C# 创建一个新的控制台应用程序 (.NET Core)

  2. 使用包管理器控制台 为 EF Core 添加 MySQL NuGet 包 。例如,使用以下命令添加 MySQL EF Core 6.0 包以使用 Connector/NET 8.0.31 及更高版本。

    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
  3. 通过从工具菜单 中选择包管理器控制台(或 管理解决方案的 NuGet 包 ,然后选择NuGet 包管理器)来 安装以下 NuGet 包 : 。 Microsoft.EntityFrameworkCore.Tools

  4. 打开包管理器控制台并在提示符下输入以下命令以创建实体和DbContext数据库 sakila。此示例的连接字符串必须包含database=sakila. 有关使用连接字符串的信息,请参阅 第 4.1 节 “创建连接器/NET 连接字符串”

    笔记

    如果您使用的连接器版本早于 Connector/NET 8.0.23,请替换MySql.EntityFrameworkCoreMySql.Data.EntityFrameworkCore.

    Scaffold-DbContext "connection-string" MySql.EntityFrameworkCore -OutputDir sakila -f

    Visual Studio 在项目中创建一个新sakila文件夹,其中包含映射到实体和sakilaContext.cs文件的所有表。

通过过滤表搭建数据库

可以在架构数据库时指定模式中要使用的确切表,并省略其余部分。下面的命令行示例显示了过滤表所需的参数。此示例的连接字符串必须包含 database=sakila.

如果您使用的连接器版本早于 Connector/NET 8.0.23,请替换MySql.EntityFrameworkCoreMySql.Data.EntityFrameworkCore.

.NET 核心命令行界面:

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 服务器的帐户必须有权访问要包含在上下文中的每个模式。

以下命令行示例显示如何将 sakilaworld架构合并到单个上下文中。如果您使用的连接器版本早于 Connector/NET 8.0.23,请替换 MySql.EntityFrameworkCoreMySql.Data.EntityFrameworkCore.

.NET 核心命令行界面:

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