Entity framework 如何为实体框架核心和npgsql中的所有主键指定defaultValueSql
我在PostgreSql中有自己的序列生成函数,下面是Entity framework 如何为实体框架核心和npgsql中的所有主键指定defaultValueSql,entity-framework,entity-framework-core,npgsql,Entity Framework,Entity Framework Core,Npgsql,我在PostgreSql中有自己的序列生成函数,下面是next_id(),我想用它作为Entity Framework Core的所有主键的默认值。有没有办法做到这一点 我试图避免以下情况,即我必须为所有实体指定它 protected override void OnModelCreating(ModelBuilder builder) { base.OnModelCreating(builder); // Don't want to repeat th
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()");
....
}
模型创建时受保护的覆盖无效(ModelBuilder)
{
基于模型创建(生成器);
//不要对每个实体重复此命令!
builder.Entity()
.Property(v=>v.VoteId)
.HasDefaultValueSql(“下一个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)
等)。您可以使用类似以下内容:
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)
等)。工作起来很有魅力。非常感谢。工作得很有魅力。非常感谢。