【问题标题】:OData in WebAPI without something like Entity FrameworkWebAPI 中的 OData 没有实体框架之类的东西
【发布时间】:2014-09-17 07:58:01
【问题描述】:

我正在构建一个从遗留系统获取数据的 WebAPI,因此没有可供我使用的实体框架。现在我想使用 OData 功能,但如果我有像实体框架这样的想法,它就无法工作。但在我的研究中,我发现我可以像这样获取 ODataQueryOptions。

    public IQueryable<Vehicle> Get(ODataQueryOptions opts)
    {
        var dal = new DataAccessVehicles();

        return (dal.GetVehicles(opts));                        
    }

在我的 DAL 中,我可以将 OData 查询转换为实际的 SQL 查询。但这似乎需要做很多工作。

我的问题是,是否有另一种方法或更好的方法可以在不使用实体框架的情况下实现这一目标。任何提示/帮助将不胜感激。

【问题讨论】:

  • 为什么不能在现有数据库之上构建一个实体框架模型?我猜在遗留库中嵌入了很多业务规则,或者没有用于数据存储的 EF 提供程序..?
  • @Charleh 并非总是可能,我最近尝试将 EF 放在 Oracle 数据库之上时遇到了同样的问题,但很少有表具有主键,因此无法正常工作。
  • @Charleh 遗留代码中确实有很多业务规则,我不允许对库中的现有代码进行任何更改。

标签: c# sql odata asp.net-web-api translate


【解决方案1】:

在启动时启用查询支持以允许对所有操作进行 OData 查询,或者使用 [Queryable] 装饰您的操作。然后确保您的操作返回IQueryable,您可以在现有集合上使用.AsQueryable() 方法。

示例:

[Queryable]
public IQueryable<Product> Get() 
{
    return products.AsQueryable();
}

看看这篇文章:

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

【讨论】:

  • 我知道如何在 WebAPI 中使用 OData。您示例中的产品并不是我可用的所有产品,我必须去服务器获取所有产品,这可能是 100000 条记录。我没有使用实体框架。我向老板提出的解决方案是将 OData 查询转换为 SQL 查询并返回正确的数据集。如果有更简单更好的方法,我只是在徘徊。
  • 明白了,我误解了你的问题。据我所知,我使用[Queryable].AsQueryable() 的简短示例不依赖于实体框架,它们应该适用于内存集合......但显然这对你没有帮助,因为你需要避免放置数千首先将对象放入内存中的集合中......
  • 我也在寻找类似的东西,但不幸的是没有任何东西可以快速实现它,而且我认为 MS 不会发布这样的东西,因为它是在他们自己的兴趣让您与 EF 绑定。它需要一些工作,但一种方法是创建一个操作过滤器并解析查询字符串,然后构建 iqueryable 对象...
猜你喜欢
  • 2013-09-02
  • 2014-12-11
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 2013-03-11
  • 1970-01-01
  • 2014-10-11
  • 2016-01-03
相关资源
最近更新 更多