Asp.net web api 使用ApicController与odata EntitySetController
我刚开始学习ASP.NET Web API,但有几件事我还不清楚:Asp.net web api 使用ApicController与odata EntitySetController,asp.net-web-api,odata,Asp.net Web Api,Odata,我刚开始学习ASP.NET Web API,但有几件事我还不清楚: 为什么我应该使用EntitySetController,它继承自odata控制器而不是ApicController 为什么在OData的上下文中经常提到EF。我知道它“代表”一个实体,但我不明白为什么这两个实体是连接在一起的。第一个是服务层,EF是模型 我已经阅读并理解了很多关于这个主题的文学作品,是的,我错过了最佳实践 非常感谢, David如果要创建OData端点,请使用EntitySetController。如果希望返
- 为什么我应该使用EntitySetController,它继承自odata控制器而不是ApicController
- 为什么在OData的上下文中经常提到EF。我知道它“代表”一个实体,但我不明白为什么这两个实体是连接在一起的。第一个是服务层,EF是模型李>
- 我已经阅读并理解了很多关于这个主题的文学作品,是的,我错过了最佳实践
David如果要创建OData端点,请使用EntitySetController。如果希望返回通用JSON或XML或其他格式(例如,使用自定义格式化程序),请使用ApicController 在Web API中,EF和OData不一定连接。您可以编写不使用EF的OData端点。很多Web API教程都使用EF,因为EF代码优先在教程中相对容易显示。:-) 为什么我应该使用EntitySetController,它继承自odata控制器而不是ApicController
- 我同意这是令人困惑的,而且似乎缺少文档(至少当我和你有同样的问题时)。我放松心情的方式就是简单地阅读。我鼓励您也这样做,因为它确实很短(集中于EntitySetController类及其应用程序);最多不应超过5-10分钟(承诺),之后您将不会有任何问题 简短的故事是,它消除了一些常见案例的样板文件(但如果你想要更多的上下文和观点,请继续阅读)
- 这一点也让我困惑不已,直到我放弃并研究了OData的起源(以前是ADO.NET数据服务)和(暗示OData核心协议版本仍然使用名为“DataServicesVersion”的头指定)。在那里,您可以发现OData使用实体数据模型,该模型与EF使用的模型规范相同,并以与EF(概念模式定义语言)相同的格式对其进行序列化。这不是巧合,WCF数据服务对EF有着主要的支持,尽管它不需要EF,但可以说它的设计是基于EF的 请注意,WCF数据服务仍然是OData的旗舰实现
更新:这是不到两周前(7月19日),很抱歉我错过了。(感谢RaghuRam Nadiminti。)我没有查看修补程序,但从示例代码来看,它的工作方式似乎是必须使用EF EDMX序列化程序将模型序列化为CSDL,然后使用EdmLib解析器将其反序列化,以供OData扩展使用。它仍然感觉有点像EF代码优先设置中的黑客(至少CLR代码只分析一次,但我更希望这两个组件一开始使用相同的内存模型)。但是,当使用模型优先或数据库优先方案时,可以通过直接反序列化VS生成的EDMX文件来实现快捷方式。在最后一个场景中,它实际上感觉不太像黑客,但同样,单一模型最好。我不知道EF是否可能会转而使用EdmLib,或者EdmLib是否会转而使用EF的EDM模型,这两个项目现在都非常强大,阻碍因素可能不仅仅是技术问题。不幸的是,ASP.NET团队目前对此无能为力
更新:再次偶然发现。他们确实来自EF团队,并表示他们不打算使用EdmLib
然而,我现在相信这都是一件好事。原因是,如果他们填补了所有的空白,删除了所有的样板文件,并使一切正常,那么他们最终将进入WCF数据服务的位置,这是一个完全集成的解决方案,程序员通过“拦截器”在管道中注入代码。对我来说,去那里的唯一原因是因为开源的要求,但即使如此,我认为尝试和提倡一个