EFCORE逆向工程生成实体类

前置条件:.net6.0 ,efcore 

新建了一个项目,项目名:EFCore

步骤(以下步骤不是最正确的步骤,大家按照官网操作比较好,我主要记录了自己使用时遇到的各种问题,并找到解决方案,如何一一解决,希望对大家有帮助)

1、新建控制台项目之后,通过nuget包下载

Microsoft.EntityFrameworkCore 7.0.16

Microsoft.EntityFrameworkCore.Design 7.0.16

Microsoft.EntityFrameworkCore.SqlServer 7.0.16

Microsoft.Extensions.Configuration

2、 通过"程序包管理器控制台" 执行命令"Scaffold-DbContext"提示命令无法执行

PM> Scaffold-DbContext "Data Source=.;Initial Catalog=mdsdb;persist security info=True;user id=sa;password=123;MultipleActiveResultSets=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -Force -UseDatabaseNames
Scaffold-DbContext : 无法将“Scaffold-DbContext”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
所在位置 行:1 字符: 1
+ Scaffold-DbContext "Data Source=.;Initial Ca ...
+ ~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Scaffold-DbContext:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException
 

3、网上说需要安装dotnet tool install --global dotnet-ef ,我抄了命令进行安装但是出现问题。发现版本不对,然后我指定了版本就成功安装了

PM> dotnet tool install --global dotnet-ef
C:\Users\Administrator\AppData\Local\Temp\401hubxy.0la\restore.csproj : error NU1202: 包 dotnet-ef 8.0.2 与 net6.0 (.NETCoreApp,Version=v6.0) / any 不兼容。 包 dotnet-ef 8.0.2 支持: net8.0 (.NETCoreApp,Version=v8.0) / any
dotnet : 无法还原工具包。
所在位置 行:1 字符: 1
+ dotnet tool install --global dotnet-ef
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (无法还原工具包。:String) [], RemoteException
    + FullyQualifiedErrorId : NativeCommandError
 
工具“dotnet-ef”安装失败。此故障可能由以下原因导致:

* 你尝试安装预览版,但未使用 --version 选项来指定该版本。
* 已找到具有此名称的包,但是它不是 .NET 工具。
* 无法访问所需的 NuGet 源,这可能是由于 Internet 连接问题导致。
* 工具名称输入错误。

有关更多原因(包括强制包命名),请访问 https://aka.ms/failure-installing-tool
PM> dotnet tool install --global dotnet-ef --version 6.0
可使用以下命令调用工具: dotnet-ef
已成功安装工具“dotnet-ef”(版本“6.0.0”)。

3.1

 还遇到一种情况

PM> dotnet tool install --global dotnet-ef --version 6.0
dotnet : Unhandled exception: Microsoft.DotNet.Cli.NuGetPackageDownloader.NuGetPackageInstallerException: 已启用包源映射,但在指定的包 ID 下找不到源: dotnet-ef。有关详细信息,请参阅包源映射文档(https://aka.ms/nuget-package-source-mapping)。

解决方案需要这里配置下

4、我按照官网修改了命令改成了

dotnet ef dbcontext scaffold "Server=.;Database=mdsdb;Trusted_Connection=True;user id=sa;password=123" Microsoft.EntityFrameworkCore.SqlServer -o Models


提示No project was found. Change the current working directory or use the --project option.

然后我再次修改命令
 dotnet ef dbcontext scaffold "Server=.;Database=mdsdb;Trusted_Connection=True;user id=sa;password=123" Microsoft.EntityFrameworkCore.SqlServer -o Models --project EFCore

提示
The Entity Framework tools version '6.0.0' is older than that of the runtime '7.0.16'. 
竟然版本还要对得上。。 

我马上修改nuget里面的版本号,
Microsoft.EntityFrameworkCore 6.0.0

Microsoft.EntityFrameworkCore.Design 6.0.0

Microsoft.EntityFrameworkCore.SqlServer 6.0.0

然后提示

To protect potentially sensitive information in your connection string, you should move it out of source code. You can avoid scaffolding the connection string by using the Name= syntax to read it from configuration - see https://go.microsoft.com/fwlink/?linkid=2131148. For more guidance on storing connection strings, see http://go.microsoft.com/fwlink/?LinkId=723263.

意思是"为了保护连接字符串中潜在的敏感信息,应该将其从源代码中删除。通过使用Name=语法从配置中读取连接字符串,可以避免对连接字符串进行脚手架搭建" 

这个问题我没有解决掉。后续有空在解决把

我新建另一个efcoretool的项目,然后执行下面的脚本,就成功了

 dotnet ef dbcontext scaffold "Data Source=.;Initial Catalog=mdsdb;user id=sa;password=123" Microsoft.EntityFrameworkCore.SqlServer  --project efcoretool
 

相关官网地址

EF Core 工具参考 (.NET CLI) - EF Core | Microsoft Learn

连接字符串 - EF Core | Microsoft Learn

  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
EF Core框架中,数据库表的列名和实体类的属性名不一致是一个常见的情况。这种情况可能出现在数据库设计时,为了符合统一的命名规范,数据库表的列名可能使用下划线分隔,而实体类的属性名可能使用驼峰命名法。 为了解决这个问题,EF Core提供了一些特性和约定,可以映射数据库列名和实体类属性名之间的关系。其中最常用的特性是`Column`和`Table`特性。 `Column`特性用于将实体类的属性映射到数据库表的列名。例如,如果数据库表中的列名是`first_name`,而实体类中的属性名是`FirstName`,可以在实体类的属性上使用`[Column("first_name")]`特性来进行映射。 `Table`特性用于将实体类映射到数据库表的名称。如果数据库表的名称与实体类的名称不一致,可以在实体类上使用`[Table("table_name")]`特性来指定对应的表名。 除了特性,EF Core还支持一些约定,根据命名规则自动进行映射。例如,默认情况下,EF Core会将实体类的属性名映射到数据库表的列名,只需保证它们的名称一致即可。如果数据库列名是多个单词的组合,使用下划线分隔,EF Core会将其转换为驼峰命名法。 总结来说,EF Core提供了特性和约定来处理数据库列名和实体类列名不一致的情况。通过使用`Column`和`Table`特性、遵循命名约定,可以实现灵活的映射,确保数据在实体类和数据库表之间的正确转换。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值