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; }
}
Run Code Online (Sandbox Code Playgroud)
映射类
this.Property(t => t.ID).HasColumnName("FundID");
Run Code Online (Sandbox Code Playgroud)
我的代码首先加入SQL查询
from fund in context.Funds
join investorFund in context.InvestorFunds on fund.ID equals investorFund.FundID
Run Code Online (Sandbox Code Playgroud)
抛出一个 Invalid column name Discriminator
Dam*_*enG 10
您需要告诉Code First这些类与表的关系.有三种选择:
每种类型的表(TPT)将意味着在Fund和InvestorFund上定义的字段将进入它们自己的表,并且在BaseEntity上定义的属性将转到名为BaseEntity的表.查询会更慢,因为每个实体现在必须组合来自多个表的字段.
modelBuilder.Entity<Fund>().ToTable("Funds");
modelBuilder.Entity<InvestorFund>().ToTable("InvestorFunds");
Run Code Online (Sandbox Code Playgroud)每个层次表(TPH)表意味着Fund,InvestorFund和BaseEntity属性都将合并到一个名为BaseEntity的表中,并且需要一个额外的字段来指示哪一行是哪种类型.这个额外的字段称为鉴别器.
modelBuilder.Entity<BaseEntity>()
.Map<Fund>(m => m.Requires("Discriminator").HasValue("F"))
.Map<InvestorFund>(m => m.Requires("Discriminator").HasValue("I"));
Run Code Online (Sandbox Code Playgroud)每种具体类型(TPC)的表格意味着Fund和InvestorFund各自拥有自己的表格,其中还包括其基类所需的任何字段.
modelBuilder.Entity<Fund>().Map(m => {
m.MapInheritedProperties();
m.ToTable("Funds");
});
modelBuilder.Entity<InvestorFund>().Map(m => {
m.MapInheritedProperties();
m.ToTable("InvestorFunds");
});
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
5720 次 |
| 最近记录: |