我有兩個POCO實體,ApplicationUser和Account。重複的外鍵
- 一個帳戶有許多ApplicationUser。
- 每個帳戶只能有一個ApplicationUser誰是BillingContact
所以,我的實體有:
public class ApplicationUser
{
public string Id { get; set; }
public int AccountId { get; set; }
public virtual Account Account { get; set; }
}
public class Account
{
public int Id { get; set; }
[ForeignKey("BillingContact")]
public string BillingContactId { get; set; }
public virtual ApplicationUser BillingContact { get; set; }
public virtual ICollection<ApplicationUser> Users { get; set; }
我的問題是,當我創建一個遷移,代碼最初只有部分的理解是BillingContact是一個外鍵。遷移代碼使用BillingContactId外鍵創建帳戶表,但它也會創建額外的Account_Id外鍵字段。
我發現了一個解決方法,但它嚴肅地不通過「氣味」測試。根本問題是我有兩個類之間的多個關係,這使得代碼優先。特別是,ApplicationUser實體沒有導航屬性,它是BillingContact外鍵的「另一端」。
如果我的導航屬性添加到ApplicationUser,並與InverseProperty屬性,那麼代碼優先似乎明白了外鍵,並且不產生額外字段將其標記:
public class ApplicationUser
{
public string Id { get; set; }
public int AccountId { get; set; }
public virtual Account Account { get; set; }
[InverseProperty("BillingContact")]
public virtual ICollection<Account> MyBillingAccounts { get; set; }
}
與此問題解決方法是MyBillingAccounts導航屬性完全是假的。一個賬戶有一個相關的ApplicationUser,它是賬單聯繫人,但是反向關係(從ApplicationUser導航回到BillingContactId外鍵)沒有任何實際意義。
因此... 有沒有更好(或適當)的方式來教授關於BillingContactId外鍵的代碼優先?
感謝您的即時答覆!實際上,我想我需要'HasRequired()'而不是'HasOptional()',因爲我想要FK是必需的(不可爲空)。但是這一細節在OP中並不清楚。 –