【问题标题】:Is it Possible to Query Multiple Databases with WCF Data Services?是否可以使用 WCF 数据服务查询多个数据库?
【发布时间】:2011-01-11 15:40:19
【问题描述】:

我将数据插入到具有相同架构的多个数据库中。出于性能原因存在多个数据库。

我需要创建一个客户端可以用来查询数据库的 WCF 服务。但是从客户端的角度来看,只有 1 个数据库。我的意思是当客户端执行查询时,它应该查询所有数据库并返回组合结果。

我还需要为客户提供定义自己的查询的灵活性。因此,我正在研究 WCF 数据服务,它为客户端指定的查询提供了非常好的功能。

到目前为止,DataService 似乎只能对单个数据库进行查询。我发现没有覆盖可以让我将查询分派到多个数据库。

有谁知道 WCF 数据服务是否可以查询具有相同架构的多个数据库?

【问题讨论】:

    标签: .net wcf .net-4.0 wcf-data-services


    【解决方案1】:

    我认为您必须编写一个外观服务,将查询分派到底层 - 顺序或并行。您通常会以 WCF 数据服务使用反射提供程序的方式创建外观,并且您可以将 LINQ to SQL 或实体框架用于底层数据库。

    如何:使用反射提供程序创建数据服务(WCF 数据服务): http://msdn.microsoft.com/en-us/library/dd728281.aspx

    HTH,

    --larsw

    【讨论】:

    • 这听起来是个好主意,但是,我看不到任何地方可以拦截查询并在多个数据库上执行它。您能否更具体地说明如何做到这一点?
    • 我能想到的唯一方法是为我的 ObjectContext 创建一个外观并滚动我自己的 IQueryable 实现,它支持查询多个数据库。但是,这似乎会非常复杂。能够在 DataService 执行查询时注入我自己的功能会很好。
    • 经过一天的调查,我如何可能实现这一点,我得出的结论是,我必须创建自己的 IDataServiceProvider 实现,它本质上必须包含重新实现内部 ObjectContextServiceProvider。这太费力了,所以我想我必须寻找其他解决方案。
    • QueryInterceptors 只允许在执行前修改表达式。它不会让我执行结果的查询和合并。
    【解决方案2】:

    I posted the question on the MSDN forums 发现这需要很多努力。

    它涉及creating your own data service provider,这很棘手,可能需要大量工作。最重要的是,通过排序+分页合并结果将是一项对我愿意做的事情来说过于复杂和冒险的任务。例如,如何在多个数据库中查询按 Name 列排序的第 1000 页?我基本上必须从所有数据库中查询所有数据,按名称排序,然后选择第 1000 页。

    【讨论】:

    • 4年后还是这样吗?
    【解决方案3】:

    看来您需要使用不同的方法。我说的是分布式缓存,例如 Oracle Coherence 或 NCache。该结构是非常透明的——你与与你的“支持映射”同步的内存数据库交互——一个或多个数据库。

    此类缓存中有很多有趣的功能。例如,您可以更改商店策略或使用不同的数据库(MS SQL、Oracle 等)构建支持地图

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2012-09-12
      • 2011-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多