1

我剛開始爲我的下一個項目使用實體框架,並且我正在努力滿足以下要求。我有以下ApplicationUser類:與單個表的多重關係實體框架asp.net MVC

public class ApplicationUser : IdentityUser 
{ 
    public string Name { get; set; } 
    public int CompanyId { get; set; } 
    public virtual Company Company { get; set; } 
} 

我有兩個類,從該類固有:

public class TrainerUser : ApplicationUser 
{ 
    public virtual ICollection<ClientUser> Clients { get; set; } 
} 

public class ClientUser : ApplicationUser 
{ 
    public string TrainerId { get; set; } 
    public TrainerUser Trainer { get; set; } 
} 

公司類看起來是這樣的:

public class Company 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public virtual ICollection<TrainerUser> Trainers { get; set; } 
    public virtual ICollection<ClientUser> Clients { get; set; } 
} 

我不能弄清楚我如何使用流利的API在ApplicationUsers表中不包含3個不同的companyId列。

目前,我有以下的流暢API配置:

modelBuilder.Entity<TrainerUser>().HasRequired(c => c.Company).WithMany(t => t.Trainers).HasForeignKey(c => c.CompanyId); 
modelBuilder.Entity<ClientUser>().HasRequired(c => c.Company).WithMany(c => c.Clients).HasForeignKey(c => c.CompanyId); 

任何人都可以點我在正確的方向?

+0

您是否嘗試將導航器移至公司當前在應用程序用戶中的其他繼承類? –

+0

如果'ApplicationUser'不是你的應用程序中的實體,那麼你可以讓這個類抽象,我認爲它應該解決這個問題,我會先嚐試。 – SOfanatic

回答

0

嘗試將這些添加到您的代碼。

modelBuilder.Entity<TrainerUser>().ToTable("TrainerUser"); 
modelBuilder.Entity<ClientUser>().ToTable("ClientUser"); 

如果我對你有幫助。您正試圖創建代表Table Per Hierarchy (TPT)的結構。在鏈接中瞭解更多關於它的信息。

基本上,當實體框架在實體中遇到繼承時會發生什麼。它創建表的默認嘗試是通過創建具有鑑別器列的類中所有派生實體的所有屬性集的列。

您試圖創建的是層次結構中每個類的單獨表。

+1

你好帕爾,這是正確的。我做了你的建議,但也將導航器移到像Paul說的繼承類。結合解決方案解決了我的問題。謝謝! – Robod