Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.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# 如何创建可以从多个数据源提取数据的IQueryable Web API?_C#_Linq_Azure_<img Src="//i.stack.imgur.com/RUiNP.png" Height="16" Width="18" Alt="" Class="sponsor Tag Img">elasticsearch_Iqueryable - Fatal编程技术网 elasticsearch,iqueryable,C#,Linq,Azure,elasticsearch,Iqueryable" /> elasticsearch,iqueryable,C#,Linq,Azure,elasticsearch,Iqueryable" />

C# 如何创建可以从多个数据源提取数据的IQueryable Web API?

C# 如何创建可以从多个数据源提取数据的IQueryable Web API?,c#,linq,azure,elasticsearch,iqueryable,C#,Linq,Azure,elasticsearch,Iqueryable,我正试图找出如何编写一个IQueryable数据源,它可以从多个源(在本例中是Azure Table、Azure Blobs和ElasticSearch)中提取和组合数据。我真的很难弄清楚从哪里开始 其思想是web服务(在本例中是Asp.NETWebAPI)可以提供一个可查询的OData接口,但当它被查询时,它会根据请求从多个源提取数据。因此,大型查询可能会访问索引服务(ElasticSearch),该服务不一定有完整的对象可用,但获取单个对象的调用将直接进入Azure表。但从服务用户的角度来看

我正试图找出如何编写一个IQueryable数据源,它可以从多个源(在本例中是Azure Table、Azure Blobs和ElasticSearch)中提取和组合数据。我真的很难弄清楚从哪里开始

其思想是web服务(在本例中是Asp.NETWebAPI)可以提供一个可查询的OData接口,但当它被查询时,它会根据请求从多个源提取数据。因此,大型查询可能会访问索引服务(ElasticSearch),该服务不一定有完整的对象可用,但获取单个对象的调用将直接进入Azure表。但从服务用户的角度来看,它总是访问相同的数据源

虽然我只想使用索引作为搜索服务,使用表作为备份,但我有一个设计要求,即它必须从多个来源提取数据,这使整个事情变得非常复杂

我想知道是否有人对此有任何指导,或者可以为我指出正确的技术。我看到的一些重大问题是:

  • 后端对象不一定与被查询的前端对象相同。多个后端对象可以合并为一个前端对象,也可以具有计算值。因此,必须翻译或映射LINQ查询
  • 根据查询参数更改数据源
下面是我正在使用的技术的简要概述:

  • ASP.NETWebAPI2Web服务作为Azure云服务运行
  • 在SUSE虚拟机上运行的ElasticSearch(在Azure上)
  • Azure表
  • 天蓝色斑点

首先,您需要将数据访问与Web API项目分开。WebAPI项目仅仅是一个接口,因此将其从等式中删除。无论是web API还是ASP.NET网页、MVC解决方案、WPF桌面应用程序等,问题的解决方案都应该是相同的

然后,您可以专注于数据问题。您需要的是某种形式的“路由器”,以根据做出决策的参数确定数据源。在本例中,您讨论的是1个item=azure和多个item,并且当超过1个item时,映射减少(我会将规则设置为策略或类似策略,以便您可以在发现1对2+不是更改路由的好条件时进行交换)

然后解决每种方法的数据访问问题

整个系统

  • 用户请求数据(通过web api,用户可以是真人或其他系统)
  • 查询被部分解析以确定路由路径
  • 路由器向处理路由数据访问的适当类发送数据请求
  • 返回数据
  • 通过使用的任何用户界面将数据路由回用户(在这种情况下,Web API-其他选项见第1段)

  • 一个警告。不要尝试混合所有类型的持久性,因为一般的“我可以提取数据或blob或{name your favored other persistant storage here}”通常会变成垃圾桶。

    这篇文章已经发表了一段时间了。第二段/最后一段已结束,但仍受限制。。。即使在几年前,这种建筑还是很常见的

    无论是WPF、ASP.NET或Java,还是编写核心接口的任何内容,关键路径都是基于信息查询的结果集。高水平,但分享的内容比我应该分享的要多,因为我参与了一个项目好几年了

    开发您的核心界面。我们制作了一个完全取代Windows/Linux的shell

    开发一个解决方案体系结构,其中提供者是源组件。提供者是发布组件

    现在,不管您的查询“源”-它只是另一个提供者。与该提供程序的接口是抽象和一致的,而与Provider::SourceAPI/ProviderSourceAPI::Interface无关

    当用户想要查询任何内容时。。。随便什么。。。刑事背景调查。。。。点击谷歌。。。查询美国西南某地/美国任何地方的这些特定公共图书馆-关于签出或签入的活动-这非常相关。退后一步,考虑目标。没有一个解决方案是太小的,并且保证——太大了——抽象出解决方案的目标——并对其进行编码

    所有的查询——不管搜索的目的是什么——都只是查询

    所有的响应——不管响应/结果集如何——都是结果——ResultantProviderModel/ResultantProviderController(不,我不是专门引用MVC)

    我无法在这里为您编写一个文字示例。。但我希望我挑战你去考虑比我在这里读到的更抽象、更开放的方法和解决方案。物理实现应该更加简化,并且非常抽象,形成一个特定的技术堆栈。搜索的来源?必须是抽象的-并使用提供程序体系结构来实现。所以-如果我有一个工具,我的桌面或基本上是办公室工作人员使用-他们查询的东西。。。约翰·多伊在物理学方面写了什么

    在一家利用SharePoint和快速搜索的公司?这很简单,开箱即用的东西

    对于自定义用户接口组件-好吧-它们需要解决后端管道问题。因此,从架构方法中抽象出每个部分/层。伪代码——不管你选择怎么做。最重要的是,您不会被锁定在特定开发范式、语言、IDE或任何东西的思维模式中。如果您可以设计解决方案摘要并对其进行遍历,那么这就是伪代码——并且对每个抽象层都这样做。。。然后开始编码。来源是相对的。。。发布方面是相对一致的

    我不知道你是否会明白这一点,但也许有人会明白,这将证明他是正确的