与单个 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。
我刚刚开始在我的下一个项目中使用 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。