EntityFrameworkコアを使用しているときにPostgreSQLで自動インクリメントされた値が機能しない

asp.net-core entity-framework-core postgresql

質問

PostgreSQLの自動インクリメント機能は動作していないようです。

私は次のコードを持っています:

namespace project.Models
{
   public class DatabaseModel
   {
       [Key]
       [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
       [Column(Order=1, TypeName="integer")]
       public int ID { get; set; }
   }
 }

データベースを更新すると(移行後)、ID列は自動インクリメントなしの主キーです。

新しいオブジェクトをデータベースに追加しようとすると、次のエラーが発生します。

Microsoft.EntityFrameworkCore.DbContext[1]
  An exception occurred in the database while saving changes.
  Microsoft.EntityFrameworkCore.DbUpdateException: An error occurred while updating the entries. See the inner exception for details. ---> Npgsql.PostgresException: 23502: null value in column "ID" violates not-null constraint

誰もがこの問題を解決するのに役立つことができる?キーを自動インクリメントする方法を教えてください。

受け入れられた回答

特定の型のintegerを持つ列を作成したので、PostgreSQLでIDを生成するために型をserialとして指定する必要があります。

https://www.postgresql.org/docs/current/static/datatype-numeric.html#DATATYPE-SERIAL


人気のある回答

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }

新しいモデルですべての値生成プロパティにID列を使用するには、コンテキストのOnModelCreating()に次のコードを配置します。

builder.ForNpgsqlUseIdentityColumns();

これにより、デフォルトで.ValueGeneratedOnAdd()がIdentityを持つすべてのキーとその他のプロパティを作成します。 ForNpgsqlUseIdentityAlwaysColumns()を使用してIdentityを常に持つことができます。また、UseNpgsqlIdentityColumn()およびUseNpgsqlIdentityAlwaysColumn()を使用して、プロパティごとにIDを指定することもできます。

ポストグレッグefcore値の生成



Related

ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ