如何在使用EF Core反向工程数据库时保留原始表名与属性名
解决EF Core Scaffold-DbContext反向工程保留原始命名的方案
最简解决方案(适用于EF Core 5+、Oracle.EntityFrameworkCore 5+版本)
直接在原有命令末尾添加-UseDatabaseNames参数即可,该参数会强制脚手架使用数据库中的原始表名、列名,不会自动转换为帕斯卡命名格式。
修改后的执行命令如下:
Scaffold-DbContext "User Id=x;Password=x;Data Source=(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = xxxxx)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xx)))" Oracle.EntityFrameworkCore -OutputDir Models -Context KoopNextContext -Tables EXCHANGE_RATES_D, EXCHANGE_RATES_M -UseDatabaseNames
低版本兼容方案
如果你使用的EF Core版本低于5.0,无法使用上述参数,可以通过自定义命名转换服务实现:
- 项目中安装
Microsoft.EntityFrameworkCore.Design包 - 实现自定义的
ICandidateNamingService,替换默认的命名转换逻辑,在命名转换时直接返回原始数据库名称 - 在Scaffold命令中指定使用自定义的设计时服务
注意事项
使用-UseDatabaseNames参数时,-Tables参数后指定的表名需要和数据库中存储的表名完全一致,包括大小写、下划线格式,否则会出现无法找到表的错误。
内容的提问来源于stack exchange,提问作者Asım Gündüz
相关产品推荐
相关产品推荐

