【问题标题】:Is it possible to $expand endpoint for OData v4 WebApi 2 without including "Include" clause in entity framework 6 dbContext是否可以在实体框架 6 dbContext 中不包含“包含”子句的情况下为 OData v4 WebApi 2 扩展端点
【发布时间】:2015-12-22 01:28:51
【问题描述】:

我注意到,当我实现 OData WebAPI GET Endpoint 时,我可以使用 $expand 来获取默认情况下不显示的导航属性。但是,导航属性将始终为空。

然后我进行了一些挖掘并意识到这是因为我通过实体框架访问数据的方式,除非我指定“包含”子句,否则它不会拉入导航属性。

DbContext.Entity.Include("NavigationProperty").ToListAsync()

有没有一种更简单的方法可以让这项工作正常进行,而无需在两个位置指定我想要检索的额外属性?换句话说,有没有办法设置 DBcontext 来识别通过 OData 传入的查询参数,而不必执行“包含”子句?

谢谢, D

【问题讨论】:

    标签: entity-framework-6 asp.net-web-api2 odata


    【解决方案1】:

    定义您的 Get 方法以返回 IQueryable<T> 并用 EnableQuery 装饰它,如下所示:

    [EnableQuery]
    public IQueryable<Entity> Get()
    {
        return DbContext.Entity;
    }
    

    EnableQuery 告诉 OData 框架将查询组合(包括 $expand 处理)应用于方法返回的查询。

    【讨论】:

    • 只有在实体框架启用延迟加载时才会发生这种情况? [EnableQuery] OData WebAPI 层的过滤器。但是,当延迟加载被禁用时,或者如果您有一个不直接传回 dbcontext 的 DTO 层,您是否仍然需要使用 Include 在实体框架 DbContext 层进行扩展。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-03
    • 1970-01-01
    • 1970-01-01
    • 2014-12-11
    • 2013-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多