質問: EF Core Fluent APIを使用して次のモデルを宣言しました。 ``` modelBuilder.Entity() .HasKey(p => new { p.Name, p.Id }); ``` PostgreSQLでデータベースを作成すると、両方のフィールドがプライマリキーとしてマークされますが、Idフィールドは自動インクリメントとしてマークされません。私も追加しようとしました ``` [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] ``` Fooの下のIdフィールドに移動コードに何の違いもありません。それはPPKですがId AIを作る方法はありますか?
回答: これらのデータアノテーションは、このトリックを行うべきです。多分、PostgreSQLプロバイダに関連するものです。 EF Coreのドキュメントから: > 使用されているデータベースプロバイダに応じて、値はEFまたはデータベースによってクライアント側で生成されます。値がデータベースによって生成された場合、エンティティをコンテキストに追加するときにEFが一時的な値を割り当てることがあります。この一時的な値は、 `SaveChanges`中にデータベース生成値に置き換えられます。 > > このFluent Apiの設定で試すこともできます: ``` modelBuilder.Entity() .Property(f => f.Id) .ValueGeneratedOnAdd(); ``` しかし、私が以前に言ったように、これはDBプロバイダーに関連するものだと私は思う。 DBに新しい行を追加し、 `Id`列の値が生成されたかどうかを後で確認してください。