【问题标题】:Not able to use Nullable DbGeography无法使用 Nullable DbGeography
【发布时间】:2014-05-20 23:32:13
【问题描述】:

我在 SQL 中有一个地理字段,我将其标记为空。

然后在我的 EF 实体上,我添加了一个可为空的 DbGeography? 属性,但我收到一条消息说这是不允许的。

那么,如何在数据库中插入未定义的 DbGeography?

我正在寻找像 DbGeography.Empty 或 DbGeography.Unknown 这样的东西。

但我找不到任何...

谢谢你, 米格尔

【问题讨论】:

  • DbGeography 是一门课吧?它已经可以为空了。不需要?

标签: c# .net entity-framework


【解决方案1】:

DbGeography 是一个类,因此它已经可以为空。只需在你的模型中给它一个空值。

【讨论】:

    【解决方案2】:

    如果您想要一个不可为空的DbGeography 属性,但又想表达一个空(但不是空)值,您可以这样做...

    [Required] public virtual DbGeography GpsCoordsOrWhatever { get; set; } = DbGeography.FromText("POINT EMPTY")
    

    DbGeographySystem.Data.Entity.Spatial 命名空间中的其他类型是类(引用类型,因此可以为空)。

    相反,如果您想拥有一个类类型的不可为空的属性,您可以将[Required] 属性应用于该属性,或者使用modelBuilder.Entity<Entity>().Property(t => t.Property).IsRequired()。这不会阻止将null 分配给属性,但它将映射到后备存储(大多数情况下为数据库)中的非空字段,并将在实体框架的验证中检查null

    【讨论】:

    • 这是一个很好的观点,因为它可以用作字段的初始化器。您可以避免讨厌的“空”。结构通常具有相同的 xxx.Empty 字段,并且可以使用“new”设置类实例,但 DbGeography 没有默认 ctor,因此答案非常好。
    【解决方案3】:

    这是因为DbGeography 是类,不允许将类标记为nullablenullable 仅用于结构)。

    将您的资源类型更改为DbGeography(不是DbGeography?)。由于DbGeography 是类,因此属性具有null 值是可以的。

    【讨论】:

      【解决方案4】:

      实体不需要明确标记为可为空。无论如何,您都可以将其设置为 null。

      【讨论】:

        【解决方案5】:

        你可以这样做 MyDbGeographyProperty = null; Latitude and Longitude is read-only from the obj 这是 kjbartel 所说的;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-12-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多