为什么视图中使用ROW_NUMBER生成的列会被标记为可空?
问题解决办法
方法1:修改视图(推荐,一劳永逸)
SQL Server默认会将ROW_NUMBER()窗口函数生成的列标记为可空,哪怕实际运行时不会出现NULL值。我们可以用ISNULL函数强制标记该列为非空,改写视图中最后一段SELECT逻辑即可:
SELECT *, -- 用ISNULL包裹,第二个参数传入固定常量,告诉SQL Server这列永远不会为NULL ISNULL(ROW_NUMBER() OVER (ORDER BY FullLibelle), 0) AS Id FROM (SELECT IdTypeArticle, IdTypeArticleParent, Logo, Libelle, FullLibelle, Racine FROM cte) AS CTE1
修改完视图后重新生成/刷新EDMX模型,Id列会被自动识别为非空,可直接设置为实体主键。
方法2:EDMX手动配置(无需修改数据库视图)
如果不方便修改生产环境的视图,可以直接在EDMX设计器中手动调整配置:
- 打开EDMX设计界面,找到对应视图生成的实体
- 选中
Id列,右键打开属性面板,将可空属性设置为False - 再次右键点击
Id列,选择「实体键」选项,将该列设为主键 - 保存EDMX文件,重新生成实体类代码即可
注意:如果后续执行了「从数据库更新模型」操作,手动修改的EDMX配置可能会被覆盖,因此优先推荐使用方法1。
内容的提问来源于stack exchange,提问作者YannickIngenierie
相关产品推荐
相关产品推荐

