【问题标题】:EF Core insert null value to nullable column that has default valueEF Core 将空值插入到具有默认值的可空列
【发布时间】:2017-06-17 13:57:33
【问题描述】:

我对使用 EF Core 时 SQL 中的特定场景感到好奇。 例如,有一个列允许 null 并且同时具有默认值,这是不寻常的情况,但这不是这里的问题。 问题是关于技术可能性的。

[SomeId] [uniqueidentifier] NULL DEFAULT (newsequentialid())

并且在应用程序中存在具有适当属性的实体(代码优先)

public Guid? SomeId { get; set; }

问题是如何将此实体插入数据库,以便 SomeId 具有 Null 值。因为即使属性为 Null,数据库也会用默认值覆盖它。

这可以通过将 null 显式分配给列来使用纯 sql 来完成,但似乎 EF 无法做到这一点,或者我错了吗?

编辑: 详细说明

public class ExampleTable
{
    [Key]
    int Id { get; set; }

    string Name { get; set; }

    Guid? SomeId { get; set; }
}

以 Seed 方法为例:

var record1 = new ExampleTable
{
    FirstName = "Carson"
}
var record2 = new ExampleTable
{
    FirstName = "Carson",
    SomeId = null
}
context.ExampleTableSet.Add(record1);
context.ExampleTableSet.Add(record2);
context.SaveChanges(record);

记录 1 和 2 是相同的,因为 SomeId 是可为空的 Guid?,并且在这两种情况下,在数据库中提交 SomeId 后都会从 newsequentialid时间>。 有没有办法让 SomeId Null 在数据库中也是如此。

【问题讨论】:

  • 回答:这不能通过 EF:stackoverflow.com/questions/41668301/… 完成
  • 您可以使用 SqlDefaultValue 执行此操作,并且仍然允许该类型可以为空。像这样:'modelBuilder.Entity(entity.ClrType).Property("RowPointer").HasDefaultValueSql("NEWID()")'。如果你这样做,你就是在说。在我的持久层中,我想要这种行为,但对于我的应用程序来说这很好。

标签: entity-framework null nullable default-value


【解决方案1】:

我不确定我是否完全理解这个问题,但通过修改您的声明,您可以设置默认值。在创建记录时,'SomeId' 将默认为 NULL

    public class ExampleTable
    {
        public ExampleTable()
        {
            SomeId = null;
        }

        public Guid? SomeId { get; set; }
    }

【讨论】:

  • 我已为问题添加了更多信息。
  • 我指的是数据库中的值不会保持为空。
猜你喜欢
  • 2017-03-14
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 2013-05-19
  • 2021-06-18
  • 2011-05-26
  • 1970-01-01
  • 2016-08-12
相关资源
最近更新 更多