使用实体框架生成非多态查询

时间:2018-08-06 20:37:13

标签: entity-framework entity-framework-6 ef-code-first

我的问题类似于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

enter image description here

如何只查询 basic 表?

0 个答案:

没有答案