我正在使用Entity Framework 6来执行基本的CRUD操作,这一切都很好。我需要能够在日期范围内选择我的对象,这又非常简单。但是,这些对象可以分布在几个基本上是前一年数据仓库的数据库中。一旦我们在日期范围内寻找它们。
示例我们想要2015年1月1日到2016年11月9日之间的所有Foo对象; 2015年的Foo数据将位于不同的数据库中。这一直追溯到2005年。并非所有的Schema都是相同的。
我们可以拥有11个EF项目,或11个上下文和11个连接字符串。该解决方案存在每年在创建存档时添加代码的问题。这似乎是一个黑客。在可预见的未来,交换到Azure存储方法并不是一种选择。
更优雅的解决方案?
答案 0 :(得分:2)
只要您的所有数据库都有与您想要查询的实体相同(或类似)的模式,您就可以为所有数据库设置一个DbContext
,只需切换连接字符串即可。您必须管理连接字符串列表并循环遍历它们,连接到每个连接字符串并查询每个连接字符串以获取数据。当然,如果您的数据库以一致的方式命名(例如,根据年份),则不需要维护所有连接字符串。如果您的查询只访问过一个数据库,那么您可以计算出哪个是合适的连接字符串并使用它。这最终看起来像标准的分片策略。 Here是对Microsoft的用于EF的SQL Azure分片库的引用,也可能是一种解决方案
或者,您可以使用SQL Server的跨数据库查询功能,并在所有数据库中设置视图。这有维护问题,更不用说性能问题,但我不知道您的数据大小。