如何为 entity framework 核心和 npgsql 中的所有主键指定 defaultValueSql

How can I specify defaultValueSql for all primary keys in entity framework core and npgsql

我在 PostgreSql 中有自己的序列生成函数,next_id() 下面,我想将其用作具有 Entity Framework Core 的所有主键的默认值。有什么办法可以做到这一点?

我试图避免必须为所有实体指定它的以下情况。

protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        // Don't want to repeat this command for every entity!
        builder.Entity<Vote>()
        .Property(v => v.VoteId)
            .HasDefaultValueSql("next_id()");

        ....
    }

你可以这样使用:

foreach (var type in modelBuilder.Model.GetEntityTypes())
{
    var primaryKey = type.FindPrimaryKey();
    if (primaryKey.Properties.Count == 1 && primaryKey.Properties[0].ClrType == typeof(int))
        primaryKey.Properties[0].Relational().DefaultValueSql = "next_id()";
}

根据您的需要,您可以删除 ClrType == typeof(int) 个条件或添加另一个条件(例如 primaryKey.Properties[0].ClrType == typeof(long) 等)