【问题标题】:How to handle a nullable foreign key field in Entity Framework?如何在实体框架中处理可为空的外键字段?
【发布时间】:2010-08-19 16:41:54
【问题描述】:

我有一个表,其中包含一个可以为空的整数字段,该字段是外键。当我尝试将实体模型的 Nullable 属性设置为 True 时,我收到一个错误,指出 Int32 类型的字段不能为空。因此,如果 Entity Framework 不支持可为空的整数,我如何将行插入到具有空值的表中?如果没有为可空属性指定值,Entity Framework 插入一个值 0,由于外键约束而引发错误。

SQL Server 可以使用可为空的外键,因此我想保留检查约束。我在这里有什么选择?

提前致谢!

【问题讨论】:

  • 错误前提。 EF 确实 支持可为空的 int。但是intint? 是两种不同的类型。针对可为空的 int 列生成一个新模型,您会看到。在我看来,您的数据库模型并不是您想象的那样。
  • 好的,所以问题是在将实体模型的 Nullable 属性设置为 True 之后,我还必须将外键关系的 Multiplicity 属性设置为零或一。这使错误消失并生成了正确的模型。当我尝试从数据库更新模型时,我很惊讶 EF 没有这样做,但无论哪种方式,我现在都准备好了!如果您重新发布您对我的断言的更正作为答案,我会接受它。谢谢!

标签: sql-server entity-framework


【解决方案1】:

EF 确实支持可为空的 int。但是int和int?是两种不同的类型。针对可为空的 int 列生成一个新模型,您会看到。

更新模型不会改变关联的多重性的原因是 EF 会在您更新时尝试保留您的 CSDL 自定义。它将主要从头开始重新生成 SSDL,并将任何新对象/关系添加到 CSDL,但不会覆盖您可能所做的更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-14
    • 1970-01-01
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多