带有数据注释和 Postgresql 的“最后修改”列的 Entity Framework Core 自动值生成

问题描述 投票:0回答:0

我正在使用 .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()");

这似乎可行(我只尝试插入),但是,这不可行,因为我有很多表,每个表都有这些日期时间列,这意味着我必须为每一列执行此操作。

这让我觉得我错过了什么。有没有一种解决方案可以使数据注释起作用?谢谢!

windows entity-framework-core npgsql .net-7.0 postgresql-15
© www.soinside.com 2019 - 2024. All rights reserved.