使用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()");
有人可以协助解决这个问题吗?
非常感谢。
答案 0 :(得分:1)
好,我知道了这个问题。
由于配置:
builder.Property(x => x.EntityCreated).HasDefaultValue(DateTime.Now);
创建迁移时,它使用的是创建迁移时生成的DateTime。结果,它将此字段的默认值设为静态DateTime。
为解决此问题,我将迁移还原到以前的版本,并使用以下配置:
builder.Property(x => x.EntityCreated).HasDefaultValueSql("getdate()");
然后我创建了一个新的迁移并更新了数据库。
这现在解决了我的问题。