テーブルのプライマリキーを整数自動インクリメントIDに更新しようとしています。EF 6コードファースト - 整数プライマリキー - カラムにNULL値を挿入できません。
これは私の実体である:
public class Reservation
{
public int Id { get; set; }
public ReservationStatus Status { get; set; }
public string Name { get; set; }
public string CustomerName { get; set; }
...
}
これは私のOnModelCreating方法である:私は挿入しようとすると
public partial class Reservations_AlterKey_Id_AutoIncrement : DbMigration
{
public override void Up()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false, identity: true));
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String());
AddPrimaryKey("dbo.Reservations", "Id");
}
public override void Down()
{
DropPrimaryKey("dbo.Reservations");
AlterColumn("dbo.Reservations", "CustomerTaxCode", c => c.String(nullable: false, maxLength: 128));
AlterColumn("dbo.Reservations", "Id", c => c.Int(nullable: false));
AddPrimaryKey("dbo.Reservations", new[] { "Id", "DeviceId", "CustomerTaxCode" });
}
}
:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
...
modelBuilder.Entity<Reservation>()
.HasKey(e => e.Id)
.Property(e => e.Id)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
...
}
これは、生成された移行であります新しい予約(更新 - データベースの後)次の例外i
カラム 'Id'、テーブル 'xxxxx.dbo.Reservations'に値NULLを挿入できません。
これは私がデザイナー(Visual Studioの2015)から列のプロパティで見たものである。
は "アイデンティティです" まだfalseです。
どうすればこの問題を解決できますか?あなたは、SQL Serverの既存の列にIDを追加することはできません事前
これらの属性を[Fluent](https://msdn.microsoft.com/en-us/data/jj591617.aspx)の代わりに 'Reservation'-classの' Id'プロパティに追加しようとしましたか?スタイル: '[DataMember、Key、DatabaseGenerated(DatabaseGeneratedOption.Identity)]'。レクリエーションを強制するためにテーブルを削除しようとしましたか? –
はい、まだ同じです。すべての移行を削除すると、1回の移行を再作成してから、データベースのID仕様を再作成することが予期したとおりに行われることに気付きました。私はすでに生産バージョンが存在するのでデータベースを再作成することは避けたいと思います。私はすべてのデータを消去しません:(何か提案? – Androidian
OnModelCreationをオーバーロードするのではなく、主キーに[Key]起こりうる問題を絞り込むのに役立ちます。 – Licht