sqlserver某个视图无法生成EF实体模型edmx
根本原因:EF无法将可空值字段推断为主键。
EF 无法推断出主键,因为推断的主键字段,在视图中都为null,而EF无法将可空值字段推断为主键。
解决方案:
sqlservr中使用ISNULL字段,让主键字段必须不为空;
案例:
1利用已有唯一键
ISNULL(T_Habitat.PointBatchID,'0000')
ISNULL(LEFT(dbo.T_Habitat.PointBatchID,4),'0000')
2、自己创建唯一键
ISNULL(newid(), '00000000-0000-0000-0000-000000000000')as ID,
结果:
思路来源:
1 、https://bbs.csdn.net/topics/391921659
有句话:我自己已经解决了,我通过打开XML编辑器打开了之后,看到没有生成一张表被注释了,然后按照注释修改了。
<!--生成过程中发现错误:
警告 6002: 表/视图“WaterEco.dbo.V_HabitAverage”未定义主键。已推断出该键,并将定义创建为只读的表/视图。-->
<EntityType Name="V_HabitAverage">
<Property Name="PointBatchIDLeft" Type="nvarchar" MaxLength="4" Nullable="false" />
<Property Name="ID" Type="uniqueidentifier" />
</EntityType>
-->
修改视图后,生成的XML是:
<!--生成过程中发现错误:
警告 6002: 表/视图“WaterEco.dbo.V_HabitAverage”未定义主键。已推断出该键,并将定义创建为只读的表/视图。-->
<EntityType Name="V_HabitAverage">
<Key>
<PropertyRef Name="PointBatchIDLeft" />
</Key>
<Property Name="PointBatchIDLeft" Type="nvarchar" MaxLength="4" Nullable="false" />
<Property Name="ID" Type="uniqueidentifier" />
</EntityType>
你也可以直接修改XML来改正这个错误,当时这可能导致数据库与数据模型不一致,
下次如果数据库视图又有改动,更新视图时可能还会报错,因为生成的XML被覆盖了。
所以建议修改数据库视图。
2、https://bbs.csdn.net/topics/390911105
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具