.NET EF CORE 从现有数据库批量生成Model类
从现有数据库开始
以前版本的实体框架支持数据库优先的开发方法。 在这种方法中,您从现有数据库对模型进行逆向工程 这种方法被称为现有数据库的 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 工具的初始帮助:

如果你得到这样的错误:
Could not execute because the specified command or file was not found. Possible reasons for this include:
- You misspelled a built-in dotnet command.
- You intended to execute a .NET Core program, but dotnet-ef does not exist.
- You intended to run a global tool, but a dotnet-prefixed executable with this name could not be found on the PATH.
尝试通过执行以下命令来安装 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 类的文件:

-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)