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

Posted

技术标签:

【中文标题】与 OData 控制器等效的 Odata WCF 服务功能【英文标题】:Equivalent Odata WCF Service Functionality with OData Controller 【发布时间】:2019-12-28 21:45:08 【问题描述】:

在一个项目中,我非常接近使用 WCF 服务和实体框架来实现 OData。使用 WCF 服务,我能够扩展 DataService,它能够将我的上下文转换为 OData 可查询的实体。除了使用 ODataController 之外,我想做同样的事情。理想情况下,我希望从一个控制器访问我的所有实体集。这可能吗?

这是我迄今为止尝试过的方法。 How do I bind multiple entity sets to one odata controller?

这是我在 wcf 服务中使用的方法

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]
    [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, IncludeExceptionDetailInFaults = true)]
    public class MyService : MSDataService.System.Data.Services.DataService<MyDataContext>
    
        private SPWeb _web;
        private string connectionString;

        #region Constructor
        /// <summary>
        /// Default constructor
        /// </summary>
        public MyService() : base()
        

        

        #endregion
        #region Methods

        protected override MyDataContext CreateDataSource()
        
            return newMyDataContext();
        



        public static void InitializeService(MSDataService::System.Data.Services.DataServiceConfiguration config)
        
            config.SetEntitySetAccessRule("MyEntity1", MSDataService::System.Data.Services.EntitySetRights.AllRead);
            config.SetEntitySetAccessRule("MyEntity2", MSDataService::System.Data.Services.EntitySetRights.AllRead);
            config.DataServiceBehavior.MaxProtocolVersion = System.Data.Services.Common.DataServiceProtocolVersion.V2;
            config.DataServiceBehavior.AcceptProjectionRequests = true;
            config.UseVerboseErrors = true;
            config.EnableTypeAccess("*");
            config.SetEntitySetPageSize("*", 1000);
        
        #endregion
    

MyDataContext 具有用于 MyEntity1 和 MyEntity2 的 DbSet。

对于 OData 控制器,我目前需要为每个实体使用两个不同的控制器,但我想要一个通用控制器。

【问题讨论】:

【参考方案1】:

听起来你需要 RESTier:

Restier 是 WCF 数据服务的精神继承者。代替 使用当前的 Web API + OData 生成无穷无尽的样板代码 工具链,RESTier 帮助你建立一个标准化的、可查询的 只需几分钟即可完成基于 HTTP 的 REST 接口。这只是 开始。

与之前的 WCF 数据服务一样,Restier 提供了简单且 之前塑造查询和拦截提交的直接方法 在他们访问数据库之后。和 Web API + OData 一样,你仍然 可以灵活地添加您自己的自定义查询和操作 您已经熟悉的技术。

https://github.com/OData/RESTier

【讨论】:

我非常接近:blog.scottlogic.com/2015/12/01/generalizing-odata.html 如果这失败了,我将尝试 RESTier。谢谢!

以上是关于与 OData 控制器等效的 Odata WCF 服务功能的主要内容,如果未能解决你的问题,请参考以下文章

将OData Uri转换为他的等效Linq表达式

将 WCF 服务中的数据公开为 oData

WCF 数据服务 (OData) 和 CORS

带有 WCF REST 的 OData

[转]WCF Data Services OData

您可以将 WCF 数据服务(ne OData、ne Astoria、ne ADO.NET 数据服务)与 NetTcpBinding 一起使用吗?