DateTime.Now 实体配置中的默认值始终在数据库中设置相同的日期时间

DateTime.Now default value in entity configuration always sets the same DateTime in the database

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

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

下面是我设置这个默认值的配置代码:

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

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

我很困惑,因为我已经检查过在提交到数据库之前没有在其他任何地方设置这个日期时间,我不确定是否有其他人遇到过同样的问题,但我有点抓狂我对此很在意,因为我还尝试了其他一些方法,例如:

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

任何人都可以协助解决这个问题吗?

非常感谢。

好的,我明白了。

因为配置:

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

当我创建迁移时,它使用的是在创建所述迁移时生成的 DateTime。因此,它使该字段的默认值为静态 DateTime。

为了克服这个问题,我将迁移恢复到以前的状态,并使用了以下配置:

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

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

这已经解决了我的问题。