如何为 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)
等)
我在 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)
等)