0
問題出在這裏。我有表用戶其中有很多領域。我想要做的就是這個表拆分成多個實體是這樣的:將Entity Framework中的表拆分爲多個實體
User
-> GeneralDetails
-> CommunicationDetails
-> Address
etc.
所有的用戶提取某些字段爲GeneralDetails時順利。然而,當我嘗試做同樣的事情CommunicationDetails EF爆炸並需要建立一對一之間的關係一般詳細和CommunicationDetails。
樣品實體的定義:
public class User {
public int UserId { get; set; }
public string SomeField1 { get; set; }
public int SomeField2 { get; set; }
public virtual GeneralDetails GeneralDetails { get; set; }
public virtual CommunicationDetails CommunicationDetails { get; set; }
public virtual Address Address { get; set; }
}
public class GeneralDetails {
[Key]
public int UserId { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public virtual User User { get;set; }
}
public class CommunicationDetails {
[Key]
public int UserId { get; set; }
public string Phone { get; set; }
public string DeviceToken { get; set; }
public virtual User User { get;set; }
}
public class Address {
[Key]
public int UserId { get; set; }
public string City { get; set; }
public string Country { get; set; }
public string Street { get; set; }
public virtual User User { get;set; }
}
樣品映射:
modelBuilder.Entity<User>().
HasRequired(user => user.GeneralDetails).
WithRequiredPrincipal(details => details.User);
modelBuilder.Entity<User>().
HasRequired(user => user.CommunicationDetails).
WithRequiredPrincipal(details => details.User);
modelBuilder.Entity<User>().
HasRequired(user => user.Address).
WithRequiredPrincipal(details => details.User);
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<GeneralDetails>().ToTable("Users");
modelBuilder.Entity<Address>().ToTable("Users");
爲什麼地球上EF希望這種關係?有什麼辦法可以解決這個問題嗎?
這似乎是你的用戶表已經正確歸一化,一旦適當標準化意味着你應該能夠讓他們作爲一個實體。事實上你把這張表分成三份,表明你可能只想在你的數據庫中使用三張不同的表格。這只是一個建議,如果我錯了,請糾正我。 – Srb1313711
@ Srb1313711我不同意。 OR/M的一個要點是將對象映射到數據庫。對象的形狀應該由應用程序域驅動,而數據庫應該是數據庫形狀的。案例和觀點,數據庫中的多對多關係需要一個關聯表,它通常不應該映射到應用程序中的類。 – Aron