与单表实体框架asp.net MVC的多个关系

时间:2016-06-07 19:19:19

标签: c# asp.net-mvc entity-framework ef-code-first ef-fluent-api

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

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);

有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

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

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

如果我找对你。您正在尝试创建表示Table Per Hierarchy (TPT)的结构。在链接上阅读更多相关信息。

基本上发生的事情是实体框架在实体中遇到继承。它默认尝试创建表是通过使用discriminator列创建所有派生实体的所有属性集的列。

您要创建的内容是层次结构中每个类的单独表格。