使っています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
- ID 列を削除します。
- BankAccount の ID をコメントアウトし、新しい ID を追加します (つまり、
ID として BankAccountId を追加し、移行と更新を追加します。これにより ID が削除されます)。 - 新しい列を ID として追加します。
ステップ2
- 新しく追加された列を削除し、前の列を再度追加します。BankAccountId をコメント化し、ID のコメントを解除します。
- 移行と更新を追加します (これにより BankAccountId が削除され、ID として Id が追加されます)。