Entity Framework Core でModel FirstでAutoIncrementな主キーを定義するときはモデルクラスをこのように定義すると思います。
public class ToDo { [DatabaseGenerated(DatabaseGeneratedOption.Identity)] [Key] public int Id { get; set; } [Required, MaxLength(512)] public string Description { get; set; } public bool Complete { get; set; } }
sqliteなどはこれでいいのですが、PostgreSQLを使う場合は注意が必要です。dotnet ef migrations add First
などでMigrationスクリプトを生成した後にひと手間加えます。
Id = table.Column<int>(nullable: false) .Annotation("Autoincrement", true) .Annotation("Npgsql:ValueGeneratedOnAdd", true), //この行を追加
主キーのカラムを定義しているスクリプトで、Npgsqlのアノテーションを追加します。これが今後の確定した仕様になるかはわからないのですが、現状はこれを加えないと自動生成=PostgreSQLの場合はカラムをSerial型として定義、が動かず、普通の数値型として定義されてしまいます。詳細はこちらのIssueで議論され、いったんはこれでクローズされています。