DateTime。现在,实体配置中的默认值始终会在数据库中设置相同的DateTime

时间:2019-01-07 10:13:13

标签: entity-framework-core ef-fluent-api

使用EF Core在Fluent API中配置实体时遇到一个奇怪的问题。

我所有的实体都有一个EntityCreated字段,它是一个DateTime对象,在将其作为新记录添加到数据库时,将其设置为当前DateTime。

以下是我用于设置此默认值的配置代码:

builder.Property(x => x.EntityCreated).HasDefaultValue(DateTime.Now);

问题在于,每次添加新记录时,它都会使用在数据库中创建第一个记录时使用的第一个DateTime,而不是使用当前的DateTime。

我很困惑,因为在提交给数据库之前,我已经检查过此DateTime是否未设置在其他任何地方,我不确定是否有人遇到过相同的问题,但是我有点scratch头因为我还尝试了其他一些方法,例如:

1) builder.Property(x => x.EntityCreated).HasDefaultValueSql("getdate()");
2) builder.Property(x => x.EntityCreated).HasComputedColumnSql("getdate()");

有人可以协助解决这个问题吗?

非常感谢。

1 个答案:

答案 0 :(得分:1)

好,我知道了这个问题。

由于配置:

builder.Property(x => x.EntityCreated).HasDefaultValue(DateTime.Now);

创建迁移时,它使用的是创建迁移时生成的DateTime。结果,它将此字段的默认值设为静态DateTime。

为解决此问题,我将迁移还原到以前的版本,并使用以下配置:

builder.Property(x => x.EntityCreated).HasDefaultValueSql("getdate()");

然后我创建了一个新的迁移并更新了数据库。

这现在解决了我的问题。