2015-05-04 63 views
0

我正在學習MVC並堅持創建外鍵。我一直通過使用其類中的主鍵的相同名稱來創建外鍵。所以,我有以下簡單的模型,具有不同名稱的實體框架外鍵

public class User 
{ 
    [Key] 
    public Guid ID { get; set; } 

    public string Email { get; set; } 

    public string Password { get; set; } 
} 

和LoginHistory的另一種模式是,

public class LoginHistory 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    public Guid UserID { get; set; } 

    public DateTime AttemptDateTime { get; set; } 
} 

現在這一部分,我知道,如果我在LoginHistory車型使用用戶名,然後它將作爲外鍵被創建。但是如果我想在模型LoginHstory中將該列命名爲CustomUser,該怎麼辦?

我已經檢查這個問題, Asp.net mvc entity framework code first associate foreign key with different name

據其回答我的模式將是這樣的,如果我想使用不同的名稱作爲主鍵,

public class LoginHistory 
{ 
    [Key] 
    [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] 
    public int ID { get; set; } 

    public Guid CustomUser { get; set; }  

    [ForeignKey("CustomUser")] 
    public virtual User User { get; set; } 

}

根據上述解決方案,我使用關聯和導航屬性。如果我只想使用該協會而不使用導航屬性怎麼辦?創建具有不同名稱的外鍵的經驗法則是什麼?除了選擇關聯數據之外,還需要導航屬性?

流利的api可以讓許多事情更容易完成,但我喜歡用Data Annotations來做事情,或者最初我只想完全理解Data Annotations。謝謝

回答

1

如果你想使用數據註釋,你所做的完全沒問題,你應該有導航屬性。

+0

我希望我可以標記兩個答案作爲答案,但正如你直接回答我的問題,導航屬性必須在我的情況下,所以我將這個標記爲答案。我的困惑是,我可以使用導航屬性獨立,但如果使用不同的名稱,那麼它是必須的。那就是我從你的回答中瞭解到的。 –

1

如果您不需要導航屬性,則無需在刪除導航時指定它。 基本上你會直接從EF插入LoginHistory而沒有導航屬性。沒有什麼大不了的,但請記住,如果你想使用級聯刪除左右,那麼將需要一個外鍵。

P.S.我已經刪除了所有數據註釋,並轉移到FluentAPI。這給了我更清潔的模型,我在應用程序中傳遞。