我正在使用 .NET 7 和 Entity Framework Core 以及 postgresql (npgsql)。
我想将自动生成的
CreateOn
和 ModifiedOn
列添加到我的所有表中。我希望它们分别在插入或更新行时更新到当前日期时间。
所以我的模型都继承了一个抽象类,它有两个带注释的数据列。
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public DateTimeOffset CreatedDate { get; set; }
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTimeOffset UpdatedDate { get; set; }
我假设,就像 .NET 文档中所说的那样,这将在插入和更新行时自动生成日期时间。但是,迁移中未显示此自动生成,并且在为数据库做种时出现错误
null 不是 createdDate 可接受的值
(我在播种时留空,因为它应该是自动生成的)。对我来说,这意味着自动生成不起作用。
在线资源告诉我将以下行添加到
DbContext
OnModelCreate
函数以自动生成:
modelBuilder.Entity<EamEntity>()
.Property(e => e.CreatedDate)
.HasDefaultValueSql("NOW()");
modelBuilder.Entity<EamEntity>()
.Property(e => e.UpdatedDate)
.HasDefaultValueSql("NOW()");
这似乎可行(我只尝试插入),但是,这不可行,因为我有很多表,每个表都有这些日期时间列,这意味着我必须为每一列执行此操作。
这让我觉得我错过了什么。有没有一种解决方案可以使数据注释起作用?谢谢!