我的问题类似于this question,但我使用的是 Entity Framework 6.2。
我正在使用Inheritance with EF Code First: Table per Type (TPT)。
我有一个名为BasicAd的父类:
[Table("basicad")]
public class BasicAd
{
public long BasicAdId { get; set; }
[Required]
[StringLength(100, MinimumLength = 2)]
public string Title { get; set; }
// more properties
}
我有一个子类,名为:RealEstateRental:
[Table("realestaterental")]
public class RealEstateRental : BasicAd
{
[Required]
public short NoOfBedrooms { get; set; }
// more properties
}
我让实体框架根据上述类创建数据库表,这已按预期完成。它将创建 BasicAd 表和 RealEstateRental 表(数据库为MySQL)。
这是我的ApplicationDbContext:
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("MyDB")
{
}
public DbSet<BasicAd> BasicAd { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
Database.SetInitializer<ApplicationDbContext>(new CreateDatabaseIfNotExists<ApplicationDbContext>());
}
}
现在,我想使用Non-polymorphic Query从BasicAd中进行选择(只有 BasicAd ,我不想加入 RealEstateRental ):>
公共BasicAd GetBasicAd(长ID) {
var query = from b in Context.BasicAd.OfType<BasicAd>() where b.BasicAdId == id select b;
return query.SingleOrDefault();
// I have tried this too:
// return Context.BasicAd
// .OfType<BasicAd>()
// .AsNoTracking()
// .FirstOrDefault(r => r.BasicAdId == id);
但是当我检查由EF生成的查询时,我看到它是一个多态查询,即,它在联接中包含 RealEstateRental :
如何只查询 basic 表?