我使用Code First方法創建數據庫。在這裏,我想實現1對1的關係用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
表也與PersonalDetails
也有1對1的關係。添加新表Nominee
當我運行Update-Database命令的代碼首先遷移比異常後occure:
操作失敗,因爲索引或統計名爲「IX_PersonalDetailId」表「PersonalDetails」已存在
任何人都可以請告訴我最新的問題,我該如何解決這個問題?
編輯:
我在這裏分享我的研究,在這個問題上,請糾正我,如果我錯了。可能會發生此異常,因爲在共享主鍵方法中,依賴表的PK也是主表的FK。因此,在這種情況下,有2個主表,即AccountHolder
和Nominee
用於1個依賴表,即PersonalDetail
。所以當Entity框架嘗試創建2個與上面提到的異常相同的FK時,結果就是這樣。
您必須使用具有'PersonalDetail'屬性的基類('AccountHolder'和'Nominee'派生自它)。我認爲這可以與TPH繼承一起使用。 – 2013-03-04 08:38:01
你的遷移是什麼樣子的? – cadrell0 2013-03-04 14:02:11
我剛剛閱讀你的編輯,是的。PersonalDetail應該是主要表格,AccountHolder和被提名者應該是從屬表格 – cadrell0 2013-03-04 14:04:45