【发布时间】: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