我有一个轻微的设计问题:我必须创建一个从多个数据库服务器检索客户数据的Web服务(asmx或wcf),每个服务器都完全相同,除非它们包含不同状态的数据(每个数据库1个服务器)州,大州可以有倍数等。)
这将由呼叫中心使用,例如,有人呼叫呼叫中心并说,我可以在我的订单交付时有一个指示我的订单号是“aa_etc”,服务应该对所有人运行查询服务器并返回该订单的所有订单详细信息。
这是直截了当的,除了有多个服务器要查询。我的想法是让中央sqlite数据库与当前在线服务器的所有连接字符串然后依次查询每个服务器
public class OnlineServer
{
public string Name {get;set;}
public string ConnectionString {get;set;}
}
...
public class Order
{
public List OrderDetail getDetails(string orderno,string connstring)
{
//Code to get all orders from database using specified connstring
}
....
}
....
List servers = getOnlineServers();
foreach(OnlineServer in servers)
{
OrderDetails d = Order.getDetails("aa_etc",OnlineServer.ConnectionString);
}
写下这个想法是完全错误的。
我真的很感激,如果有人可以帮助我朝着正确的方向前进,这是一个非常大的项目,并且开始这个错误将会在以后流下眼泪。
由于
答案 0 :(得分:1)
如果你不能将数据合并到一个数据库中。 您可以使用nHibernate。它可以查询多个数据库,请参阅http://mikehadlow.blogspot.com/2008/10/mapping-entities-to-multiple-databases.html
您必须为每台服务器设置不同的实体。通过这种方式,它将处理所有数据库连接,池,会话等。
答案 1 :(得分:0)
我想更进一步地考虑这个问题,但我有一个可能感兴趣的离题创意,所以我会在那里完成。
我的想法是拥有中央sqlite数据库 与所有连接字符串 当前在线服务器然后查询 每一个轮流
这给了我一个想法:为什么不能异步地触发每个系统的搜索查询?我在这里考虑AJAX(但你可以使用iFrames)......
我假设UI可以直观地将数据“拉到一起” - 无论是通过直接布局还是通过聪明的客户端代码 - 这将为您提供更多选项来定制UI,但代价是更复杂客户端代码库。
您还有其他选择,例如允许用户根据需要缩小搜索范围。
此外,添加/删除数据源很简单。
这是我需要更直接地解决你的实际问题的地方;在我看来,你最希望每个数据库都有一个单独的服务 - 但你可以灵活地做到这一点。