Asp.net web api 将WCF数据服务OData提供程序转换为Web API的最简单方法是什么?

Asp.net web api 将WCF数据服务OData提供程序转换为Web API的最简单方法是什么?,asp.net-web-api,odata,wcf-data-services,Asp.net Web Api,Odata,Wcf Data Services,我目前正在研究将我们当前的WCF数据服务OData提供商转换为Web API OData的可行性 我只是对Web API的OData实现有点困惑。使用WCF数据服务,它位于ADO.Net实体模型的顶部,该模型公开了SQL Server后端的一组表,即,您将ADO模型交给WCFDS生成,然后您可以通过标准OData语法访问所有表 使用目前为止所有阅读资料中的Web API,我们是为每个要公开的表/对象创建控制器还是单独的操作?我错过什么了吗?ODataWebAPI控制器是否可以通过ADO数据模型公

我目前正在研究将我们当前的WCF数据服务OData提供商转换为Web API OData的可行性

我只是对Web API的OData实现有点困惑。使用WCF数据服务,它位于ADO.Net实体模型的顶部,该模型公开了SQL Server后端的一组表,即,您将ADO模型交给WCFDS生成,然后您可以通过标准OData语法访问所有表

使用目前为止所有阅读资料中的Web API,我们是为每个要公开的表/对象创建控制器还是单独的操作?我错过什么了吗?ODataWebAPI控制器是否可以通过ADO数据模型公开整个模型?必须为每个表创建一个操作将是一个混乱和过度的过程

当前,如果我们需要添加一个表,我们只需将其映射到EDMX中,WCFDS将自动公开它,因为它映射到模型的整个上下文。

生成模型 你可以:

  • 使用来自ASP.NET Web API的。这将生成与EF自己的约定模型生成器生成的模型不同的模型:EdmLib
    IEdmModel
    。看看是先使用模型还是先使用数据库。这种方法似乎真的很落后,确实如此,但它基本上是有效的
  • 序列化EF模型并将其重建为
    IEdmModel
    (请参阅)。同样,这是非常低效的。如果使用模型优先或数据库优先,则只需反序列化EDMX文件以构建
    IEdmModel
    。它仍然在内部生成一个不同的模型,但至少CDSL是一种比CLR代码约定更稳定的格式,因此,与使用两个不同的基于约定的模型构建器相比,您可能不会感到意外
原因是ASP.NET Web API OData扩展使用EdmLib,而EF使用自己的代码,并且。如果你好奇的话,也许你会觉得有用

开发API 一旦您从一个唯一的源生成了模型(这样您就可以从一个地方处理您的模型),基本上您必须为每个实体创建一个控制器。WebAPI的要点不是自动构建东西,而是为开发人员提供灵活性。这有助于减少冗余,但它不会提供开箱即用的一切

退后一步 在上面提到的rant中,我还讨论了服务层API和数据层API之间的区别。ASP.NET Web API更适合于服务,而OData使服务变得笨拙。另一方面,OData使数据访问变得轻而易举(本质上类似于RESTful SQL),并且通过直接连接到数据模型,可以像您在WCF数据服务中看到的那样自动化许多事情。带有ODATA扩展的ASP.NET WebAPI位于中间,它的值不是普遍认同的(使用服务API上的ODATA URI语法的某些位当然是有用的)。 不要被最近关于ASP.NET Web API的热议所炒作,it和WCF数据服务是非常不同的,在您的设计中运行在不同的层上。实际上,在多层体系结构中,您可以很好地看到使用ASP.NET Web API构建的服务API位于使用WCF数据服务构建的OData API之上

我的建议是仔细考虑您试图构建的内容,根据答案,选择ASP.NET Web API并接受您公开的API将与以数据为中心的OData API大不相同的事实,或者坚持使用WCF数据服务

可能的计划 通过搜索诸如“非CRUD web/RESTful/hypermedia API”之类的术语,或者通过比较诸如ServiceStack之类的产品(它们提倡较少面向数据的API),您可以在web上找到大量关于web上服务层API的资料

如果您仍然不确定项目的性质,请将其原型化

  • 如果您最终得到一组具有Web API的基本相同的控制器,每个控制器只映射到一个实体,那么您的API是高度面向数据的使用WCF数据服务
  • 如果您最终使用WCF数据服务执行了大量OData操作和笨拙的实体,那么您需要在API的服务器端使用更多的域逻辑,而面向数据并不能为您提供足够的功能使用Web API。这里有一个很好的经验法则,就是像处理SQL DBMS中的存储过程一样处理OData操作。实际上,将任何OData服务器都视为DBMS,因为它们就是DBMS。如果你不想把它放在SQL接口后面,就不要把它放在OData接口后面
重要事项(更新) 2014年3月27日,微软宣布,WCF数据服务将由微软支持ASP.NET Web API。为了处理我在这里公开的“数据层”用例,微软表示它计划扩展ASP.NETWebAPI。一些也在进行中。WCF数据服务在某个时候也将是开源的,因此新的维护者接管并非不可能,尽管还不确定