列のIDENTITYプロパティを変更するには、列を削除して再作成する必要があります。質問する

列のIDENTITYプロパティを変更するには、列を削除して再作成する必要があります。質問する

使っていますEFコア2.1

これが私の最初のモデル定義でした。

public class Customer //Parent
{
    public int Id { get; set; }

    public string Name { get; set; }

    public string Email { get; set; }

    public BankAccount BankAccount { get; set; }

}


public class BankAccount
{
    public int Id { get; set; }

    public string Branch { get; set; }

    public string AcntNumber { get; set; }

    public DateTime CreatedDate { get; set; }

    public int CustomerId { get; set; }

    public Customer Customer { get; set; }

}

Idしかし、 & のCustomerId両方を 1 対 1 の関係として持つのはオーバーヘッドであることに気づいたので、BankAccount モデル定義を以下のように更新できます。

public class BankAccount
{
    public int Id { get; set; }

    public string Branch { get; set; }

    public string AcntNumber { get; set; }

    public DateTime CreatedDate { get; set; }

    public Customer Customer { get; set; }

}

DbContext クラスでは、プリンシパル エンティティを以下のように定義します。

HasOne(b => b.Customer).WithOne(c => c.BankAccount).HasForeignKey<BankAccount>(f => f.Id);

実行中にupdate-database以下のエラーが発生します。

System.InvalidOperationException: 列の IDENTITY プロパティを変更するには、列を削除して再作成する必要があります。

しかし、理想的には、このエラーを取り除くのではなく、列、制約、テーブルを削除し、データベース全体を削除する必要があります。しかし、それでも同じエラーが発生します。

ベストアンサー1

私も同じ問題に遭遇しましたが、2 つの手順と 2 つの移行で解決しました。

ステップ1

  1. ID 列を削除します。
  2. BankAccount の ID をコメントアウトし、新しい ID を追加します (つまり、
    ID として BankAccountId を追加し、移行と更新を追加します。これにより ID が削除されます)。
  3. 新しい列を ID として追加します。

ステップ2

  1. 新しく追加された列を削除し、前の列を再度追加します。BankAccountId をコメント化し、ID のコメントを解除します。
  2. 移行と更新を追加します (これにより BankAccountId が削除され、ID として Id が追加されます)。

おすすめ記事