我在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()");
....
}
答案 0 :(得分:4)
您可以使用以下内容:
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)
等)。