EF Core Sidekick:自动生成 C# 代码
最后修订日期:2024 年 10 月
介绍
EF Core Sidekick 是一个 Visual Studio 的扩展插件,可增强 Visual Studio 中自动代码生成的功能。 它提供了一组工具和模板,用于从现有数据库生成 EF Core 实体和 DbContext,然后从实体生成 DTO、服务、以及 REST API。
新特性
版本 23.0.0.582
此版本的 EF Core Sidekick 提供以下新功能:
- 从数据库创建实体时能够查看函数和存储过程的SQL,并提供格式化功能(目前已支持的数据库:SQL Server,MySQL,PostgreSQL)。
- 优化产品使用体验,修复一些内部测试发现的问题。
版本 23.0.0.552
此版本的 EF Core Sidekick 提供以下新功能:
- MySQL支持函数和存储过程。
- 优化产品使用体验,修复一些内部测试发现的问题。
版本 23.0.0.527
此版本的 EF Core Sidekick 提供以下新功能:
- 数据库连接列表页面增加刷新功能。
- PostgreSQL支持函数和存储过程。
版本 23.0.0.507
此版本的 EF Core Sidekick 提供以下新功能:
- 支持 .NET 8 和 EF Core 8。
- 支持 Oracle 23ai 和 PostgreSQL 16。
版本 23.0.0.479
此版本的 EF Core Sidekick 提供以下新功能:
- 从数据库创建实体时能够选择和映射存储过程(目前仅支持 SQL Server)。
- 修复了 EF Core Sidekick 和 JetBrains ReSharper 之间的冲突问题。
- 优化产品使用体验,修复一些内部测试发现的问题。
版本 23.0.0.464
此版本的 EF Core Sidekick 提供以下新功能:
- 新增显示连接数据库的表格、视图和函数的数量以及勾选数量的功能。
- 新增“评价”功能,方便用户在使用插件过程中随时提供反馈。
- 优化产品使用体验,修复一些内部测试发现的问题。
版本 23.0.0.456
此版本的 EF Core Sidekick 提供以下新功能:
- (从数据表生成的)实体支持变更检测和通知并支持选择变更跟踪策略。
- 如果您从同一数据库连接创建过实体,上次选择过的表/视图/函数将会被记住,方便下次选择。
- 在配置自定义代码时,能够通过表达式过滤实体和字段,使自定义代码只应用到筛选的实体或属性。
- 生成的代码与.NET 8.0 兼容。
- 优化 SQLite 数据类型映射规则以匹配 .NET 常用数据类型。
版本 23.0.0.426
此版本的 EF Core Sidekick 提供以下功能:
- 从实体生成 DTO
- 生成实体、服务或 API 时支持自定义代码
- 从数据库函数生成 DataContext 函数
- 支持为API配置路由模板
- 优化数据类型映射
版本 23.0.0.297(预览版)
此版本的 EF Core Sidekick 支持以下环境:
- 支持 Visual Studio 2022
- 支持 Entity Framework Core 6.0 和 7.0
- 支持 .NET 6.0 和 7.0
- 通过 ODBC 或本机驱动程序支持 SQL Server、SQLite、PostgreSQL、Oracle 和 MySQL 数据库
此版本的 EF Core Sidekick 提供以下功能:
- 从现有数据库创建 EF Core 实体
- 从实体生成服务和 API
- 从控制器、实现或接口生成 API
安装
确保您的环境满足以下要求:
已安装 Visual Studio 2022(17.0 至 17.6)。
需要安装以下工作负载:
- ASP.NET 和 Web 开发
- 数据存储和处理
安装 EF Core Sidekick 时,Visual Studio IDE 应停止运行。
EF Core Sidekick 支持以下数据库连接:
数据库类型 版本 驱动 MySQL
Amazon RDS for MySQL
Amazon Aurora for MySQL
Azure Database for MySQL5.6, 5.7, 或 8.0
8.0.20
5.6.10a
5.6ODBC Oracle
Amazon RDS for Oracle12c,18c,19c,或 23ai
12.1.0.1Oracle Developer Tools for Visual Studio 或 ODBC PostgreSQL
Amazon RDS for PostgreSQL
Amazon Aurora for PostgreSQL
Azure Database for PostgreSQL9.6, 10.1, 11.3, 12, 或 16
12.3-R
11.6
11Npgsql PostgreSQL integration 或 ODBC SQL Server
Amazon RDS for SQL Server
Azure SQL Database2017, 2019, 或 2022
2017 14.00.3281.6.v1
最新SQL Server引擎(截至2020年9月)MicrosoftSqlServerProvider、SqlServerDotNetProvider * 或 ODBC SQLite 3 VisualStudio.Data.Sqlite 或 ODBC SqlServerDotNetProvider 是 Microsoft SQL Server 的官方 .NET 数据提供程序,通常与 .NET Framework 或 .NET Core 一起安装。 您可以通过以下链接找到有关如何安装和配置 SqlServerDotNetProvider 的详细信息:
对于 .NET Framework,请访问https://docs.microsoft.com/sql/connect/ado-net/sql-server-net-data-provider。
对于 .NET Core,请访问https://docs.microsoft.com/sql/connect/ado-net/sqlclient-namespace。
用户指南
从现有数据库创建实体
第 1 步:启动功能
可通过三种方法访问此功能:
- 选择 IDE 菜单 工具 > EF Core Sidekick > 从DB创建实体,或者
- 右键单击项目并选择 EF Core Sidekick > 从DB创建实体,或者
- 右键单击 服务器资源管理器 中的数据库连接,然后选择 EF Core Sidekick > 从DB创建实体。
第 2 步:连接数据库
右键单击项目并选择 EF Core Sidekick > 从DB创建实体。
单击“新建”创建新的数据库连接。
在 连接属性 对话框中,指定数据库的连接信息。
下面以 SQL Server 数据库为例。 有关连接到 SQL Server 数据库的更多信息,请参阅 https://learn.microsoft.com/visualstudio/data-tools/add-new-connections?view=vs-2022。
数据源 字段指示数据库类型和用于连接的数据提供程序。 您可以单击 更改 按钮选择不同的数据源和数据提供程序。
在如下窗口中选择数据源和数据提供程序。 您需要事先安装数据提供程序。
在 连接属性 对话框中指定连接属性后,单击 测试连接 以确保数据库连接成功。
第 3 步:选择表、视图或函数
创建数据库连接后,您可以在 从数据库创建实体 窗口中选择它,然后可以从数据库中选择一个或多个对象(表、视图、函数、存储过程)(①)。 如果列表很长,您可以搜索对象的名称。如果您之前从同一数据库连接创建过实体,则最后一次选中的对象将会被记住以方便下次选择。
默认情况下,启用关联表和引用的选择 选项 (②) 处于选中状态,因此当您选择一个表时,被该表引用的表(所谓的 被引用表)将被自动选中,引用关系将显示在 数据类型 和 映射类型 列(⑥)中。
而引用该表的表(所谓的 引用表)不会被自动选中。 当 启用关联表和引用的选择 选项 (②) 处于选中状态时,引用列 将在 参考 部分 (③) 中可见,如果您在 参考 部分中手动选择引用列,相应的引用表(以及这些表的被引用表)将会被自动选中。
必要时,您可以更改实体和/或属性 (④) 的默认名称。
您可以查看各个字段的数据类型(⑤),以及表的关系(⑥)。
您可以选择数据库中的用户自定义函数(⑦)并生成同名的 DataContext 函数。 有关详细信息,请参阅 生成数据库函数。
您还可以选择数据库存储过程(⑧)(目前仅支持 SQL Server 存储过程)。
单击 下一步 继续。
第 4 步:指定生成设置
选择表、视图和/或函数后,您可以指定实体生成和自定义代码的设置。
配置生成设置
在 生成设置 选项卡中,您可以选择现有的生成配置文件或单击 新建 创建新的配置文件。
通用配置
- 覆盖文件:覆盖同名文件。
- 将自定义代码应用到生成的代码:当此选项被选中时,您可以在 自定义代码 选项卡中配置自定义代码。
实体配置
将架构名称添加为实体名称的前缀:架构的名称将添加为实体文件名的前缀。 例如,dbo_cur_emp.cs 包含架构前缀“dbo_”,而 cur_emp.cs 不包含架构前缀。
为每个架构创建存储实体文件的子文件夹:使用架构名称创建一个文件夹并将实体存储在此文件夹中。
启用实体更改检测与通知(仅支持表生成的实体):能够通过使用以下通知策略来跟踪对数据表生成的实体所做的更改:
快照
更改后通知
更改前与更改后通知
更改前与更改后通知(带原始值)
关于通知策略的更多信息,请参考此页面:https://learn.microsoft.com/ef/core/change-tracking/change-detection。
目标配置
您可以指定文件的生成位置以及使用哪个命名空间。
您可以修改将生成文件的相对输出路径。
对于 Dal(数据访问层),您还可以指定 ORM(当前支持 EFCore 6/7/8)。
自定义代码
有关更多信息,请参阅 自定义代码。
第 5 步:生成实体
单击 完成 生成实体文件。
成功生成实体后,您需要从屏幕复制脚本以在 Program.cs 中注入数据库上下文,并分别在 appsettings.json 文件中添加连接字符串。 根据您的数据库信息修改连接字符串。
文件生成成功后,会列在项目下。
生成数据库函数
数据库中的用户定义函数可以生成为同名的 DataContext 函数。 有关用户定义函数的更多信息,请参阅 https://learn.microsoft.com/ef/core/querying/user-defined-function-mapping。
目前支持两种类型的函数:标量函数和表值函数。
选择一个或多个用户定义的函数。
Dal/DataContext.cs 下会生成一个 DataContext.Functions.cs 文件。
您现在可以调用该函数。
例如,您可以使用以下脚本调用标量值函数:
您可以使用以下脚本调用表值函数:
生成DTO
您可以从实体生成 DTO(数据传输对象)。
第 1 步:启动功能
有两种方法可以访问此功能:
- 选择一个或多个 CS 文件,然后右键单击并选择 EF Core Sidekick > 生成 DTO,或者
- 右键单击 CS 文件的脚本编辑器,然后选择 EF Core Sidekick > 生成 DTO。
第 2 步:选择字段
选择一个或多个实体,然后右键单击并选择 EF Core Sidekick > 生成 DTO。
选择一个或多个要包含在 DTO 中的字段 (①)。 您可以修改 DTO 中的字段名称 (②)。
第 3 步:指定生成设置
指定 DTO 生成的设置。 您可以选择现有的生成配置文件或单击 新建 来创建新的配置文件。
通用配置
- 覆盖文件:覆盖同名文件。
目标配置
- 您可以指定是否为内置 DTO 转换器生成文件。
- 您可以指定是否在 DTO 文件中生成
DataContract
特性。 - 您可以指定文件的生成位置以及使用哪个命名空间。
- 您可以修改生成文件的输出路径。
第 4 步:生成 DTO
单击 完成 以生成文件。
成功生成 DTO 后,您可以按照屏幕上的说明使用第三方映射器在 DTO 和实体之间进行转换。
从实体生成服务和 API
实体文件生成成功后,您可以从实体生成服务和API。
第 1 步:启动功能
有两种方法可以访问此功能:
- 选择一个或多个 CS 文件,然后右键单击并选择 EF Core Sidekick > 生成服务和 API,或者
- 右键单击 CS 文件的脚本编辑器,然后选择 EF Core Sidekick > 生成服务和 API。
第 2 步:配置服务和 API
选择 API
选择一个或多个实体,然后右键单击并选择 EF Core Sidekick > 生成服务和 API。
在 生成服务和 API 窗口中,生成所有 API(①)选项处于默认选中状态,这意味着将为所有基础服务生成 API。 您还可以选择 生成 API (②) 仅为某些服务生成 API。
配置授权
您可以为控制器(①)(API的上层)选择授权策略,从而所有 API 都会默认使用该策略。 您还可以在 API设置 页面(②)中为每个 API 选择不同的策略。
对于控制器,您可以选择以下基本授权策略之一:无、使用应用程序默认策略、使用匿名策略 或使用其他自定义策略。
无:不使用授权策略。
使用应用程序默认策略:使用为应用程序配置的默认策略。
使用匿名策略:使用匿名访问策略。 匿名访问允许请求无需身份验证即可通过。
要添加新的自定义策略,您需要先编写代码并实现策略,然后通过选择策略列表框底部的 新策略 在此处添加策略。
在 授权策略 对话框中,单击 添加(①)添加策略,然后单击 重命名 图标(②)将默认名称更改为实际策略名称(③) ,或选择它作为默认策略 (④)。
配置服务
您可以在 服务设置 选项卡中配置每项服务的设置。
参数设置
列出服务的请求参数。
排序设置
(对于 GetList 和 GetPage)单击 添加排序选项 对数据库中的数据进行排序。 您可以选择字段或输入表达式,然后指定按升序或降序排序。
赋值设置
(对于 Add,AddRange,和 Update)您可以设置字段的值。 您可以选择一个字段或输入一个值或表达式。
返回设置
(对于 Get、GetList 和 GetPage)指定服务的每个响应字段的返回值。 您可以选择一个字段或输入一个值或表达式。
(对于 Add、AddRange、Update、和 Delete)列出服务的返回值。
对返回数据进行排序
(对于 GetList 和 GetPage)单击 对源进行排序 选择实体,然后单击 添加排序选项 选择字段或输入表达式对数据进行排序。
描述:服务的描述。
配置 API
您可以在 API 设置 选项卡中配置每个 API 的设置。
名称:API 的名称。
方法类型:API 的默认方法类型。
路由模板:指定路由模板,例如api/[controller]/[action]。
参数设置
您可以选择从以下位置获取参数:FromQuery、FromRoute、FromForm、FromBody 或 FromHeader。
FromQuery:绑定查询字符串中的参数。
FromRoute:绑定来自请求路由的参数。
FromForm:绑定请求正文中表单数据的参数。
FromBody:绑定请求体中的参数。
FromHeader:绑定请求头中的参数。
授权设置:对于当前 API,您可以选择以下基本授权策略之一:使用上层策略、使用应用默认策略、使用匿名策略、 或使用其他自定义策略。
使用上层策略:使用上层策略。 对于API来说,上层是控制器。 默认情况下,API 将使用为控制器选择的策略。
使用应用程序默认策略:使用为应用程序配置的默认策略。
使用匿名策略:使用匿名访问策略。 匿名访问允许请求无需身份验证即可通过。
描述:API 的描述。
单击 下一步 继续。
第 3 步:指定生成设置
配置生成设置
在 配置生成设置 选项卡中,指定服务和 API 生成的设置。 您可以选择现有的生成配置文件或单击 新建 来创建新的配置文件。
通用配置
- 覆盖文件:覆盖同名文件。
- 将自定义代码应用到生成的代码:当此选项被选中时,您可以在 自定义代码 选项卡中配置自定义代码。
目标配置
- 您可以指定文件的生成位置以及使用哪个命名空间。
- 您可以修改生成文件的输出路径。
自定义代码
有关更多信息,请参阅 自定义代码。
第 4 步:生成服务和 API
单击 下一步 生成文件。
成功生成服务和 API 后,您需要从屏幕复制脚本以分别将存储库和服务注入 Program.cs 中。
文件生成成功后,会列在项目下。
生成 API
您还可以仅从控制器、实现或接口生成 API。
有两种方法可以访问此功能:
- 选择一个或多个 CS 文件,然后右键单击并选择 EF Core Sidekick > 生成 API,或
- 右键单击 CS 文件的脚本编辑器,然后选择 EF Core Sidekick > 生成 API。
按照 配置授权 和 配置API 中的说明配置和生成 API。
自定义代码
自定义代码允许用户对生成的代码进行自动修改或添加代码以满足特定需求。例如:
自定义代码功能可以用来解决生成的代码与已有项目代码不完全一致的兼容性问题。
自定义代码功能还可以解决项目重新生成时手工编写的代码被覆盖的问题。当您在项目中直接新增或修改代码时,这些代码在项目重新生成时将会被覆盖,您可以通过自定义代码在项目中自动加入这些代码,而不是在项目中直接修改或新增代码。
当 生成设置 选项卡中的 将自定义代码应用到生成的代码 选项被选中时,您可以在 自定义代码 选项卡中配置自定义代码。
您可以更改某些代码的模板,例如 命名空间、继承、类特性、属性特性、方法属性、构造函数注入和代码片段。
对于每个自定义代码,您可以选择代码生效的范围:实体、实体配置、数据上下文、服务或控制器。 如果范围是实体,您还可以利用过滤器,只有符合条件的实体才会应用自定义代码。
对于属性特性,您还可以指定过滤实体字段的条件。
对于构造函数注入,您还可以指定依赖项。
对于代码片段,您还可以指定插入代码的位置。
示例1:新生成的实体自动继承某些接口和属性来实现对实体的数据操作
指定相关接口所在的命名空间,并指定对应接口的继承:
IEntity:表示需要与数据库交互 ISoftDelete:需要使用逻辑删除的数据
将 IsDeleted 属性添加到每个实体:
所有新生成的实体都会自动继承 IEntity 和 ISoftDelete,并添加 IsDeleted 属性。
示例2:自动注入服务
指定注入属性:
相关服务会自动注入。
有关更多示例,请参阅 SnapDevelop 文档中的 添加自定义代码。
FAQs
如何在生成代码中新增列
根据不同字段类型,建议采取以下方案:
如果是批量新增字段(每个实体都新增),可以通过自定义代码来新增,但是,用户需要自行将字段同步到数据库;
如果是新增计算字段,可以直接修改生成后的代码,不需要与数据库同步;
如果是新增一个数据库字段,可以直接在数据库下新增,然后在生成后的代码下手工新增一个字段。
连接 MySQL 数据库失败
通过 ODBC 驱动连接 MySQL 数据库时,出现以下错误:
Retrieving database table/view failure: ERROR [22018] [MySQL] [ODBC 8.0(a) Driver] [mysqld-5.6.30]. Please verify that the current connection is valid.
解决方案:
- 确保驱动程序版本与数据库版本匹配。
- 确保驱动程序的字符集与数据库的字符集匹配。
相关产品
免费试用全功能版本 SnapDevelop:https://www.aipuyang.com。
SnapDevelop 是一款免费的低代码工具,专为使用 EF Core 进行 Web API 开发而设计。 它提供可视化设计器、强大的代码生成功能,并遵循云原生架构。 生成的代码是标准 C# 代码,可以在任何 C# IDE 中编辑,不跟任何 IDE 绑定。