在没有实体框架的情况下创建 Odata Web API 应用程序

Posted

技术标签:

【中文标题】在没有实体框架的情况下创建 Odata Web API 应用程序【英文标题】:Creating Odata Web API application without Entity Framework 【发布时间】:2015-08-25 01:00:28 【问题描述】:

我正在寻找一个使用 WebApi 但不使用 EF 的示例 Odata 应用程序。我的要求是在一个控制器(从 ODataController 派生)中实现几个操作方法,这些方法返回可以查询的复杂对象。这些动作方法也应该能够接受多个参数。返回的数据是从多个数据源中提取的,因此不能选择使用实体框架。 我想实现这样的方法:

public List RetrieveCustomersByFilter(string name, string lastName, CustomerTypeEnum) ...业务逻辑在这里...

我在网上做了很多研究,但我仍然找不到具体的例子。它们中的大多数展示了不接受任何参数(或 id/key)并返回标准对象列表的简单方法。

谁能提供一个示例或指向一个链接来说明如何进行此操作?

谢谢

【问题讨论】:

查看tour 了解这里的主题是什么,什么不是主题,kthx @AgentHut,我在here 添加了一些示例代码。希望它可以帮助你。更多功能相关的测试用例可以参考Web API OData存储库。谢谢。 ASP .NET MVC 4 WebApi: Manually handle OData queries 的可能副本 【参考方案1】:

查看最新的带有 ODATA 的 Web API 2 示例以及所有步骤 ODATA v4 sample with asp.net web api 2

【讨论】:

【参考方案2】:

我猜你需要使用敏捷开发。 首先创建一个模型类。

public class Model
    public string ID get; set;
    public string name get; set;

然后创建一个dal类,

public class Dal
     private Model model = new Model();
     public List<Model>getAllRecords()
    
       List<model> list = new List<model>();
       .....
       .....
       list.Add(new Model
            ID =.....,
            name = ...
        );
    

然后创建一个逻辑类,从dal中获取数据,并使用linq查询数据,还可以过滤想要进入的数据

  public class Logic
        private DAL dal = new DAL();

        public dynamic dataGet(int id, string name)
         var a = (from data where dal.getAllRecords()
                   where data.ID == id && data.name == name
                   select new
                        dataid = data.ID
                        daname = data.name   
                   ).ToList();
          return a;
       
 

希望对你有帮助

【讨论】:

感谢您的回复。我已经设置了这部分(模型+dal)。我需要实现的是一个 OdataController,它有一个调用 dataGet(id,name) 的方法有正确的路由设置。 只需使用 Visual Studio 创建 odata 控制器。将控制器内部的 EF 逻辑更改为您的数据逻辑。您可以在最后使用 AsQuaryable() 返回您的数据。

以上是关于在没有实体框架的情况下创建 Odata Web API 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

实体框架中联合数据“视图”上的 OData

与 OData 控制器等效的 Odata WCF 服务功能

使用 OData 的 ASP.Net Core Web API 实现对于单个实体 URI 失败

实体框架 + ODATA + 动态列映射

Breeze、OData 和无 EF

OData $expand、DTO 和实体框架