【问题标题】:How do I tell Entity Framework that a column in a view is nullable?如何告诉实体框架视图中的列可以为空?
【发布时间】: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


【解决方案1】:

EF 有很多设计器没有的功能。

这与其说是“设计使然”,不如说是时间不够用了。

在 VS2010 中对 EF 有几处改进,见http://msdn.microsoft.com/en-us/data/ee720194.aspx

【讨论】:

    【解决方案2】:

    在模型查看器中选择实体中的列,转到属性并将 Nullable 设置为 true。

    【讨论】:

      猜你喜欢
      • 2012-02-14
      • 2015-03-15
      • 2012-04-22
      • 2018-09-05
      • 1970-01-01
      • 2010-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多