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

bor*_*sdj 5 null entity-framework nullable default-value

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

[SomeId] [uniqueidentifier] NULL DEFAULT (newsequentialid())
Run Code Online (Sandbox Code Playgroud)

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

public Guid? SomeId { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

这可以通过将 null 显式分配给列来使用纯 sql 来完成,但似乎使用 EF 无法完成相同的操作,还是我错了?

编辑:详细说明

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

    string Name { get; set; }

    Guid? SomeId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

以种子方法为例:

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);
Run Code Online (Sandbox Code Playgroud)

记录 1 和 2 是相同的,因为SomeId可以为 null Guid?,并且在这两种情况下,在数据库中提交SomeId后都会从newsequentialid获取实际值。有什么方法可以将SomeId保留在数据库中吗?

Dis*_*rno 0

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

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

        public Guid? SomeId { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)