2011-10-19 55 views
0

为了获得高可用性,我们公司正在添加新的Web服务器和SQL Server。我们将进行P2P复制以使两台SQL服务器保持一致。但是,我们在我们的应用程序中使用了EDM,它基于现有的服务器。如果我们添加另一个SQL服务器,是否需要为第二个数据库创建另一组EDM。保持2个edmx文件将是一场噩梦。并且可能在将来出于可扩展性的目的,我们添加另一个SQL服务器。对每个SQl服务器都有一个单独的EDMX文件必须有更好的方法。此外,对于使用EDM访问数据库的现有代码,我应该如何修改它以便选择正确的数据库,因此它是EDM。SQL Server复制和EDM

使用(VAR上下文=新MyCOmpanyModel.MyCompanyEntities()){....}

我不想改变这其中的每个访问EDM页:目前,像我有代码。必须有更好的选择SQL服务器(或实体)的方法,并且可以将它们设置在基本的Page类或类似的东西中。

任何帮助将不胜感激。

回答

1

这听起来像你要复制的托管与相同架构的数据库相同的数据库服务器版本之间数据=没有必要改变EDM唯一需要的变化应该是第二web服务器的连接字符串。

我纳闷你为什么选择这个解决方案? Imho为实现高可用性,公司通常针对数据库进行故障转移群集(主动/被动),并为Web服务器进行负载平衡。 Web服务器负载平衡对客户端而言是透明的,并且故障转移群集对于Web服务器是透明的。故障转移群集使用共享NAS或SAN存储(具有自己的高可用性功能,如RAID阵列和热交换)。在主动/被动群集的情况下,您只需要活动服务器的SQL服务器许可证(如果最近没有更改)。

0

感谢您的答复。所以这就是你所建议的:

<add name="MainDB" 
connectionString="metadata=res://*/MainDB..." 
providerName="System.Data.EntityClient" /> 
<add name="OtherDB" 
connectionString="metadata=res://*/MainDB..." 
providerName="System.Data.EntityClient" /> 

string connectionStringKey; 


if(Server == 1) 
    connectionStringKey = "MainDB"; 
else 
    connectionStringKey = "OtherDB"; 

     using (var context = new MainDB("name=" + connectionStringKey)) 
     { 
     } 

我不想把上面的检查服务器代码放在几乎每一页上。如果我们稍后再向网络添加一台SQL服务器,那将是一件非常头疼的事情。有没有更好的方法来在应用程序中设置服务器连接字符串或ObjectContext obj一次,并忘记它。

关于你的建议做集群数据库服务器,集群是昂贵的。它需要额外的硬件和软件。 p2P复制似乎并不昂贵。不过,谢谢你的建议。