2017-05-07 4 views
1

PostgreSQLで独自のシーケンス生成機能を持つnext_id()をEntity Frameworkコアのすべてのプライマリキーとして使用したいと思っています。これを達成する方法はありますか?エンティティフレームワークのコアとnpgsqlのすべてのプライマリキーに対してdefaultValueSqlを指定する方法

私はすべてのエンティティに対して以下のような状況を避けようとしています。

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()"); 

     .... 
    } 

答えて

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()"; 
} 

があなたのニーズに応じて、

+0

が魅力のように働いたClrType == typeof(int)基準を削除するか、別の(のようなprimaryKey.Properties[0].ClrType == typeof(long)など)を追加することができます。ありがとうございました! – Nihat

関連する問題