codefirst中的两个类
public partial class BaseEntity
{
public int ID { get; set; }
}
public partial class Fund : BaseEntity
{
public int Name { get; set; }
}
public partial class InvestorFund : BaseEntity
{
public int FundID { get; set; }
}
映射类
this.Property(t => t.ID).HasColumnName("FundID");
我的代码首先加入SQL查询
from fund in context.Funds
join investorFund in context.InvestorFunds on fund.ID equals investorFund.FundID
引发Invalid column name Discriminator
答案 0 :(得分:10)
您需要告诉Code First这些类与表的关系。有三种选择:
每种类型的表格(TPT)意味着Fund和InvestorFund上定义的字段将进入他们自己的表格,而BaseEntity上定义的属性将转到名为BaseEntity的表格。由于每个实体现在必须组合来自多个表的字段,因此查询会更慢。
modelBuilder.Entity<Fund>().ToTable("Funds");
modelBuilder.Entity<InvestorFund>().ToTable("InvestorFunds");
每个层次表(TPH)表意味着Fund,InvestorFund和BaseEntity属性都将合并到一个名为BaseEntity的表中,并且需要一个额外的字段来指示哪一行是哪种类型。这个额外的字段称为鉴别器。
modelBuilder.Entity<BaseEntity>()
.Map<Fund>(m => m.Requires("Discriminator").HasValue("F"))
.Map<InvestorFund>(m => m.Requires("Discriminator").HasValue("I"));
每个具体类型的表格(TPC)意味着Fund和InvestorFund都有自己的表格,其中还包括其基类所需的任何字段。
modelBuilder.Entity<Fund>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Funds");
});
modelBuilder.Entity<InvestorFund>().Map(m => {
m.MapInheritedProperties();
m.ToTable("InvestorFunds");
});
答案 1 :(得分:0)
您需要运行迁移。
转到包管理器控制台,然后在启用自动迁移后键入update-database
。