首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当将TPH与实体框架一起使用时,如何使我的OData只公开特定类型?

当将TPH与实体框架一起使用时,如何使我的OData只公开特定类型?
EN

Stack Overflow用户
提问于 2017-04-26 15:13:43
回答 1查看 75关注 0票数 0

因为我支持数据库中的软删除,所以我选择将我的Thing实体子类型为ActiveThingDeletedThing.

代码语言:javascript
复制
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)。如何使它现在只公开ActiveThing

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-04-26 15:47:47

我想我想明白了..。

以前,我的dbContext模型是这样的,只公开了我的基类:

代码语言:javascript
复制
public class myDbModel:DbContext
{
    public myDbModel(): base("name=ThingDb"){}

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

}

现在,我添加了‘l DbSets’来公开我的子类型。就像这样:

代码语言:javascript
复制
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

代码语言:javascript
复制
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;
    }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43638171

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档