.NET

.NET EF CORE 从现有数据库批量生成Model类

2022-04-22  本文已影响0人  Charles2018

从现有数据库开始

以前版本的实体框架支持数据库优先的开发方法。 在这种方法中,您从现有数据库对模型进行逆向工程 这种方法被称为现有数据库的 Code First。

命令行界面

以下示例说明了如何使用 CLI 工具在新的控制台应用程序中首先使用代码从 SQL Server 数据库生成模型。

首先,为项目创建一个文件夹:

mkdir EFCoreScaffoldexample

然后导航到 EFCoreScaffoldExample文件夹

cd EFCoreScaffoldExample

然后创建一个控制台新项目

dotnet new console

将下面两个包添加到依赖

dotnet add package Microsoft.EntityFrameworkCore.SqlServer
dotnet add package Microsoft.EntityFrameworkCore.Design

第一个包是 SQL Server 的 EF Core 提供程序。 第二个包包含 Entity Framework Core 命令。 任何面向 SQL Server 的 Entity Framework Core 应用程序都需要这两个包。

测试您是否可以使用 ef 命令:

dotnet ef -h

这应该会显示 EF 工具的初始帮助:


image.png

如果你得到这样的错误:
Could not execute because the specified command or file was not found. Possible reasons for this include:

尝试通过执行以下命令来安装 EF Core 工具:

dotnet tool install --global dotnet-ef

您使用 DbContext Scaffold 命令生成模型。 该命令有两个必需的参数 - 一个连接字符串和一个提供程序。 连接字符串将取决于您的环境和数据库提供程序。 provider 参数是您选择的数据库的实体框架提供程序。 本示例使用 Microsoft 提供的用于 SQL Server 的 AdventureWorks 示例数据库

dotnet ef dbcontext scaffold "Server=.\;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model

执行命令后,您将看到在项目文件夹中创建了一个名为 Model 的文件夹,其中包含代表实体的类文件集合以及 DbContext 类的文件:


image.png

-o 选项(或者 --output-dir)指定生成类文件的目录。 如果省略,则会在项目目录(.csproj 文件所在的位置)中生成类文件。
DbContext 类将采用数据库名称加上“上下文”,您可以使用 -c--context 选项覆盖它,例如

dotnet ef dbcontext scaffold "Server=.\;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -o Model -c "AdventureContext"

模型配置

生成的模型默认使用 Fluent API 进行配置,这是推荐的方法。 配置放置在生成的上下文的 OnModelCreating 方法中。 但是,如果您更喜欢使用数据注释/Data Annotations 进行配置,则可以使用 -d--data-annotations 开关:

dotnet ef dbcontext scaffold "Server=.\;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -d 

由于 Data Annotations 仅涵盖配置选项的子集,您可能会发现 Fluent API 也已用于配置模型。

更新模型

保持对数据库的更改与生成的模型同步的推荐方法是使用migrations,即首先对模型进行更改,然后使用工具生成将修改传播到数据库的代码。 但是,根据您的情况,这可能并不总是一种选择。 如果您需要在数据库架构更改后重新构建模型,您可以通过指定 -f--force 选项来实现,例如:

dotnet ef dbcontext scaffold "Server=.\;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer --force

所有类文件都将被覆盖,这意味着您可能对它们进行的任何修改,例如 添加属性或附加成员,将丢失。 您可以通过选择使用 Fluent API 进行配置和使用单独的配置类来缓解这种情况。 此外,您可以使用部分类来声明不映射到数据库表中的列的其他属性。

Visual Studio

如果您使用的是 Visual Studio,则可以使用Package Manager Console commands
为模型生成代码文件。 上面最后一个 CLI 命令的等效命令是:

PM> Scaffold-DbContext "Server=.\;Database=AdventureWorksLT2012;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Model -Context "AdventureContext" -DataAnnotations

迁移

在以前版本的 Entity Framework 中,一旦创建模型,就可以使用 -ignorechanges 选项添加不影响现有数据库架构的迁移。 Entity Framework Core 中不存在此选项,因此解决方法是创建第一个迁移,然后在将迁移应用到数据库之前删除或注释 Up 方法的内容。 这将导致模型和数据库模式匹配。

以上为cli操作另外提供一种VS插件解决方式

(EF CORE POWER TOOLS)下载地址(https://www.vsixgallery.com/extension/f4c4712c-ceae-4803-8e52-0e2049d5de9f)

上一篇 下一篇

猜你喜欢

热点阅读