EF Core将空值插入具有默认值的可空列

4

我对在使用EF Core时SQL中的特定场景很感兴趣。 例如,有一个允许为空并且同时具有默认值的列,这是不寻常的情况,但这不是问题所在。 问题是技术上的可能性。

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

在应用程序中有一个实体(Code First),其中具有适当的属性。
public Guid? SomeId { get; set; }

问题在于如何将此实体插入到数据库中,以便 SomeId 具有 Null 值。因为即使属性为 Null,数据库也会用默认值覆盖它。
可以通过纯 SQL 明确地将 Null 分配给列来完成此操作,但似乎 EF 无法执行同样的操作,我错了吗?
编辑: 为了更加详细说明:
public class ExampleTable
{
    [Key]
    int Id { get; set; }

    string Name { get; set; }

    Guid? SomeId { get; set; }
}

例如,在种子方法中(Seed method):
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);

由于SomeId是可空的Guid?,所以记录1和2是相同的,在提交后,数据库中的SomeId都会从newsequentialid获得实际值。是否有办法在数据库中也保持SomeId为空呢?


这个不能通过EF完成: http://stackoverflow.com/questions/41668301/override-sql-default-value-on-insert-using-entity-framework-core-7/41683417#41683417 - borisdj
您可以使用SqlDefaultValue来实现此操作,同时仍然允许类型为空。像这样:'modelBuilder.Entity(entity.ClrType).Property("RowPointer").HasDefaultValueSql("NEWID()")'。如果您这样做,您所表达的意思是:在我的持久化层中,我希望有这种行为,但对于我的应用程序来说,这是可以接受的。 - rahicks
1个回答

0

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

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

        public Guid? SomeId { get; set; }
    }

我已经在问题中添加了更多信息。 - borisdj
我指的是数据库中不保持为空的值。 - borisdj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接