データベースの作成に Code First アプローチを使用しています。Shared primary key
ここでは、アプローチを使用して 1 対 1 の関係を実装しようとしています。
public partial class AccountHolder
{
public int AccountHolderId { get; set; }
public virtual PersonalDetail Detail { get; set; }
}
//Added later
public partial class Nominee
{
public int NomineeId { get; set; }
public virtual PersonalDetail Detail { get; set; }
}
public partial class PersonalDetail
{
public int PersonalDetailId { get; set; }
...
}
私の流暢なAPIコード:
modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();
//Added later
modelBuilder.Entity<Nominee>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();
最初は2つのテーブルしかなくAccountHolder
、PersonalDetails
共有主キーアプローチがうまく機能していました。Nominee
しかし、と 1 対 1 の関係を持つテーブルを追加すると、問題が発生しPersonalDetails
ます。例外が発生するよりも、コードの最初の移行のUpdate-Database コマンドNominee
を実行したときに新しいテーブルを追加した後:
「IX_PersonalDetailId」という名前のインデックスまたは統計がテーブル「PersonalDetails」に既に存在するため、操作は失敗しました
誰でも何が問題なのか、どうすればこの問題を解決できるのか教えてもらえますか?
編集 :
ここで、この問題に関する私の研究を共有しています。間違っている場合は修正してください。共有主キー アプローチでは、従属テーブルの PK がプリンシパル テーブルの FK でもあるため、この例外が発生する可能性があります。したがって、この場合、2 つのプリンシパル テーブル ieAccountHolder
とNominee
1 つの従属テーブル ieがありPersonalDetail
ます。そのため、エンティティ フレームワークが上記の例外よりも同じ名前の 2 つの FK を作成しようとすると、結果が発生します。