2011-01-11 39 views
2

我有数据被插入到具有相同模式的多个数据库中。出于性能原因存在多个数据库。是否可以使用WCF数据服务查询多个数据库?

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

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

到目前为止,似乎DataService只能对单个数据库进行查询。我发现没有覆盖,将允许我发送查询到多个数据库。

有谁知道WCF数据服务是否可以使用相同模式查询多个数据库?

回答

1

I posted the question on the MSDN forums,并发现它需要大量的的努力。

它涉及creating your own data service provider,这是棘手的,可以很多工作。除了排序+分页的合并结果之外,对于我愿意做的事情来说,这是一项非常复杂和危险的任务。例如,如何查询按名称列排序的页面1000的多个数据库?我基本上必须查询所有数据库中的所有数据,按名称排序,然后选择第1000页。

1

我认为你必须编写一个外观服务,将查询分派到底层 - 无论是按顺序还是并行。您通常会以WCF数据服务使用反射提供程序的方式创建Facade,并且可以将LINQ to SQL或Entity Framework用于基础数据库。

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

HTH,

--larsw

+0

这听起来像是一个绝妙的想法,但是,我没有看到任何可以拦截查询的地方并在多个数据库上执行它。你能更具体地说明如何做到这一点吗? – Mas 2011-01-11 16:14:16

+0

我能想到的唯一方法是为我的ObjectContext创建一个外观,并滚动我自己的IQueryable 实现,该实现支持查询多个数据库。但是,这看起来会非常复杂。当DataService执行查询时能够注入我自己的功能将会很好。 – Mas 2011-01-11 17:12:21

0

好像你需要使用不同的方法。我正在谈论分布式缓存,如Oracle Coherence或NCache。该结构非常透明 - 您可以与内存数据库进行交互,该数据库与您的“备份映射”同步 - 一个或多个数据库。

这样的缓存中有很多有趣的功能。例如,您可以更改商店策略或使用不同的数据库(MS SQL,Oracle等)构建备份映射。

相关问题