在MVC应用程序上公开OData

时间:2010-11-07 18:47:33

标签: asp.net-mvc model-view-controller data-access-layer crud odata

我想为我的用户提供丰富的查询功能,以便他们可以动态添加Where子句,更改排序顺序和分组。 oData似乎是这项工作的最佳技术,但我不知道如何在MVC应用程序中正确实现它。

1)如何将支持oData的功能丰富的客户端连接到MVC架构?

2)我必须在我的存储库中公开IQueryable吗?

3)在MVC中使用2个连接表时,是否可以解释如何创建,更新或删除? (在服务层?)

3 个答案:

答案 0 :(得分:2)

开始学习OData的好地方在这里: http://msdn.microsoft.com/en-us/data/odata.aspx

一般情况下,如果需要OData和Web Services,则应使用它们1)因为出于安全或性能原因需要分离物理层,或者2)多个应用程序或消费者需要使用相同的API。当然还有其他原因,但一般来说,如果你不得不问OData是否有意义,你就没有这些要求。 ;)

答案 1 :(得分:2)

我在MVC中编写Restfull API并找到了ODATA。 MS的伟大实施。

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

是您在odata上获得良好开端的地方。

我看了这个页面

http://www.asp.net/web-api/overview/odata-support-in-aspnet-web-api/getting-started-with-odata-in-web-api/create-a-read-only-odata-endpoint

并立即启动并运行。

希望这会有所帮助。与设计和消费一起工作是一件好事。

www.odata.org/了解更多信息

PS。我发布的链接也有CRUD操作示例.... PSS。 IQueryable是重点......

答案 2 :(得分:1)

我将以一种简单的方式解释它,我希望它对你有用。

1)创建空的控制台应用程序。

2)对任何公共OData服务进行服务引用。即http://services.odata.org/northwind/northwind.svc/

enter image description here

此Visual Studio将添加一些更多的程序集引用,如下所示

enter image description here

3)编写以下代码

  

使用System;使用System.Collections.Generic;运用   System.Data.Services.Client;使用System.Linq;使用System.Text;   使用System.Threading.Tasks;

namespace ConsoleApplication4
{
    class Program
    {
        static DataServiceContext  ctx = new DataServiceContext(new Uri("http://services.odata.org/northwind/northwind.svc/"));

        static void Main(string[] args)
        {
            IEnumerable<ServiceReference1.Category> response = 
                ctx.Execute<ServiceReference1.Category>(new Uri("http://services.odata.org/northwind/northwind.svc/Categories"));

        }
    }
}

4)在Main方法结束时设置断点。现在调试应用程序。 您将看到类别列表。

enter image description here

5)如果OData暴露了允许实现所有CRUD的许可,那么你可以做到。 当然,您可以在ASP .NET MVC中返回response,但首先必须将其转换为您的Model类。

也许你可以保持静态DataServiceContext ctx = new DataServiceContext(new Uri("http://services.odata.org/northwind/northwind.svc/"));  在BaseController课程中。

你也得到这样的财产价值:

enter image description here

P.S。另请参阅此视频http://www.youtube.com/watch?v=e07TzkQyops