我使用MVC 4代碼優先使用EF 5並試圖規範化一些數據。我將與三個實體開始,給我的兩個不同的場景爲例...帶導航屬性的模型設計指導
用戶模型
public class User
{
public int UserId { get; set; }
public string PseudoName { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public Gender Gender { get; set; }
public DateTime DateOfBirth { get; set; }
// Other account related properties....
public virtual Address Address { get; set; }
public virtual Profile UserProfile { get; set; }
}
地址型號
public class Address
{
public int UserLocationId { get; set; }
public int UserId { get; set; }
// Address properties
}
剖面模型
public class Profile
{
public int UserProfileId { get; set; }
public int UserId { get; set; }
// Specific details about the user...
}
我不太熟悉EF如何處理交易。通常我會創建一個這樣的數據庫並啓動一個事務,以確保在創建用戶時,我可以創建用戶,配置文件和地址記錄以創建用戶。用EF這樣做我必須添加用戶並保存它,然後從新生成的用戶中檢索userId,然後再調用兩個插入並將密鑰添加到地址/配置文件模型並保存。我覺得這樣做很困難,因爲如果沿途出現問題,那麼用戶文件將不會完整。現在這裏是我最初的做法,但不確定這在數據庫方面是否可以接受,但似乎目前工作正常,只需要第二個意見。
第二個場景基本上從地址和配置文件模型中刪除外鍵,我所做的是使用上下文創建我的User對象,並在User對象內創建一個新的Profile/Address屬性,只需插入並保存對象到DB。在數據庫方面會發生什麼,它會創建一個沒有任何FK的新配置文件/地址,但將用戶表中的FK添加爲Profile_ProfileId,Address_AddressId。
第二個選項比第一個更有意義嗎?
是的,如果我以一種特定的方式來做,就像你在那裏列出的那樣。我想出瞭如何在導航屬性表中創建FK,而不是主類的表格,所以現在這種方式很好用。 –