【发布时间】:2010-05-15 14:44:41
【问题描述】:
我有一个视图,它有一个可以为空的 Int 列(我们称之为 StackOverflowCount)。从数据库生成 EF 模型时,EF 设计器不会将其识别为可为空,并将列创建为 Int。
我遇到的问题是,在 EF 设计器上,我将列设置为 Nullable,然后以下错误会终止编译;
Error 3031: Problem in mapping fragments starting at line 2327:
Non-nullable column MyView.StackOverflowCount in table MyView
is mapped to a nullable entity property.
我可以通过在 XML 模式下打开 .edmx 文件并手动编辑 SQL 列定义来解决这个问题,但是使用设计器无法做到这一点,并且下次我从模型中刷新时它会被覆盖数据库。
这是“设计使然”还是进入 EF 4.0 的示例?我在 VS 2010 下使用 .Net 4.0 和 EF 4.0。
【问题讨论】:
-
你有没有设法解决这个问题?我在 VS2010 上运行 EF 并且遇到了同样的问题。
-
哦,是的,我需要重新创建视图。它绑定到旧定义。
-
仅供参考。在我的情况下,删除视图并重新映射它并没有解决问题
:s,但是将列定义从fieldName更改为NULLIF(fieldName, NULL)就可以了。不是说它看起来不错,但至少它有效。 -
NULLIF 对我不起作用。我不得不将所有 NULL 列的结果联合起来,然后重新导入视图。那时 EF 将这些列识别为可为空的。我认为它的工作方式是,EF 查询视图,如果一列有空值,那么它可以为空,否则不可为空。我的 UNION 强制将空值放入所有列并欺骗 EF。导入后,我进入 SSMS 并从视图中删除了 UNION。
标签: .net entity-framework