EF Scaffold-DbContext Unable to generate entity type for table
如果数据库表没有主键,在程序包控制台使用Scaffold-DbContext命令生成表实体时会发生以下错误,导致没有生成对应的数据库表实体Model。
Unable to identify the primary key for table 'dbo.xxx'.
Unable to generate entity type for table 'dbo.xxx'.
解决方法:
升级到EF Core3.0
导致问题:
在升级EF Core3.0后,同一解决方案下的其它库有可能存在引用包的冲突,如下所示:
严重性 代码 说明 项目 文件 行 禁止显示状态 错误 检测到 Microsoft.EntityFrameworkCore.Abstractions 存在版本冲突。直接从项目引用包可解决此问题。 WebSiteService -> Microsoft.EntityFrameworkCore 3.1.2 -> Microsoft.EntityFrameworkCore.Abstractions (>= 3.1.2) WebSiteService -> Microsoft.AspNetCore.App 2.2.0 -> Microsoft.EntityFrameworkCore.Abstractions (>= 2.2.0 && < 2.3.0).
同一解决方案的另一个项目中,引用了 Microsoft.AspNetCore.App 2.2.0 , Microsoft.AspNetCore.App 2.2.0 又引用了 Microsoft.EntityFrameworkCore.Abstractions ,它的版本是(>= 2.2.0 && < 2.3.0).。
类库新升级的Microsoft.EntityFrameworkCore 3.1.2 引用的Microsoft.EntityFrameworkCore.Abstractions,它的版本是 (>= 3.1.2) 。
导致两者包引用冲突。而Microsoft.AspNetCore.App 2.2.0又是一个元包,参考https://www.cnblogs.com/TianFang/p/10582289.html。升级了后很多地方又要跟着升级。
最后:
还是在表里加上主键吧,省事。
参考文章:
https://www.cnblogs.com/DNLi/archive/2018/08/23/9524976.html
https://www.cnblogs.com/souphm/p/12060102.html