与单个 table Entity Framework asp.net MVC 的多重关系

Multiple relationships to single table Entity Framework asp.net MVC

我刚刚开始在我的下一个项目中使用 Entity Framework,但我正在努力解决以下问题。我有以下 ApplicationUser class:

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

我有两个 class 这个 class:

固有的
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; }
}

公司class是这样的:

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 table 中不包含 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);

任何人都可以指出正确的方向吗?

尝试将这些添加到您的代码中。

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

如果我没猜错的话。您正在尝试创建一个表示 Table Per Hierarchy (TPT) 的结构。在 link.

阅读更多相关信息

基本上发生的事情是 entity framework 在实体中遇到继承。它创建 table 的默认尝试是通过使用鉴别器列从 class 创建所有派生实体的所有属性集的列。

您要为层次结构中的每个 class 创建一个单独的 table。