Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ODATA可以查询任意单个二维表,而不必事先知道列数或列名_C#_.net_Wcf Data Services_Odata - Fatal编程技术网

C# ODATA可以查询任意单个二维表,而不必事先知道列数或列名

C# ODATA可以查询任意单个二维表,而不必事先知道列数或列名,c#,.net,wcf-data-services,odata,C#,.net,Wcf Data Services,Odata,我正在做一个练习,在这个练习中,我似乎被思考者们挡住了 我想创建并公开一个ODATA服务(仅限查询),该服务可以应用于任何二维单表,并允许使用者查询该表,而程序不必事先知道该表的模式 理想情况下,我希望使用WCF数据服务 一种方法是——ODATA服务指向一个可能存在随机(但有效)CSV文件的文件位置,当指向该文件时,使用者应该能够查询并使用ODATA语言进行过滤、排序、分组等 没有连接。这是一张单人桌 另一种思考方式是,在运行时之前,它是一个完全未知的数据表。(请注意,不是数据集,而是单个数据表

我正在做一个练习,在这个练习中,我似乎被思考者们挡住了

我想创建并公开一个ODATA服务(仅限查询),该服务可以应用于任何二维单表,并允许使用者查询该表,而程序不必事先知道该表的模式

理想情况下,我希望使用WCF数据服务

一种方法是——ODATA服务指向一个可能存在随机(但有效)CSV文件的文件位置,当指向该文件时,使用者应该能够查询并使用ODATA语言进行过滤、排序、分组等

没有连接。这是一张单人桌

另一种思考方式是,在运行时之前,它是一个完全未知的数据表。(请注意,不是数据集,而是单个数据表。)

假定主键是构造的列行号,因为没有任何东西可以保证任何其他列的唯一性

这看起来应该很容易,但每次我尝试一个新策略时,我似乎都会碰壁


有什么想法吗?

在本用例中使用WCF数据服务将很容易为预先存在的实体模型创建静态定义的ODATA端点,这与常规WCF服务公开您定义为生产者的特定服务接口的方式非常相似。要明确的是,这是在编译时定义的模式,而不是在运行时定义的模式

如果您想做更多的事情,那么您可能需要编写自己的自定义提供程序,这样做的各种方法将逐步为您提供更强大的功能,而代价是实现起来更加复杂。Alex James的优秀博客系列是一个很好的起点,从这里开始:

需要明确的是,实现自定义提供程序是相当棘手的,根据您的需要,可能不值得为此付出努力


解决这一问题的一种方法是实现一个数据服务,该服务公开某种元模型、键/值对、三重存储等,但这在一定程度上破坏了使用ODATA时使用强类型的好处,因此我也不特别推荐这种方法。

不管它值多少,WebAPI 2.0 OData现在支持无类型实体,请参阅以下博文:

谢谢Jon。这是一个很好的链接,比我使用的链接更有用、更完整。我对编写自己的自定义提供者感到非常满意,事实上,这一直是我练习的重点。我希望如此。但是,即使编写自定义提供者,“直到运行时才知道方案”的问题似乎也令人望而生畏。只是不知道该如何思考如何解决这个问题。我建议您在需要开始时仔细阅读他的示例并从中借用代码。这只是一个实现IDataServiceMetadataProvider和IQueryProvider以及其他一些东西的例子,然后将它们放在一起!大约一年前,我写了我自己的提供者,主要是从这组文章开始,所以如果你有时间和意愿,这当然不是不可能的。