При использовании TPH с Entity Framework, как сделать так, чтобы мои OData отображали только определенный тип?

Поскольку я поддерживаю мягкое удаление в моей базе данных, я решил ввести подтип Thing сущность как ActiveThing а также DeletedThing...

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    // TPH (table-per-hierarchy):
    modelBuilder.Entity<MyCorp.Biz.CoolApp.Thing>()
            .Map<MyCorp.Biz.CoolApp.ActiveThing>(thg => thg.Requires("Discriminator").HasValue("A"))
            .Map<MyCorp.Biz.CoolApp.DeletedThing>(thg => thg.Requires("Discriminator").HasValue("D"));
}

Теперь моя конечная точка OData (которая ранее подвергалась Thing).. как мне теперь его выставить только выставить ActiveThings?

1 ответ

Решение

Я думаю, что я понял это..

Раньше моя модель dbContext выглядела так, только выставляя мой базовый класс:

public class myDbModel:DbContext
{
    public myDbModel(): base("name=ThingDb"){}

    public DbSet<Thing> Things { get; set; }  //db table + ThingsController source

}

Теперь я добавил add'l DbSets для предоставления моих подтипов.. вот так:

public class myDbModel:DbContext
{
    public myDbModel(): base("name=ThingDb"){}

    public DbSet<Thing> Things { get; set; }  //db table

    public DbSet<ActiveThing> ActiveThings { get; set; } // now my ThingsController 'GetThings' pulls from this

    public DbSet<DeletedThing> DeletedThings { get; set; }
}

Вот мой обновленный ThingsController.cs

public class ThingsController : ODataController
{
    private myDbModel db = new myDbModel();

    /// <summary>
    /// Only exposes ActiveThings (not DeletedThings)
    /// </summary>
    /// <returns></returns>
    [EnableQuery]
    public IQueryable<Thing> GetThings()
    {
        return db.ActiveThings;
    }
}
Другие вопросы по тегам