为了高可用性,我们公司正在增加一台新的new服务器和sql服务器。我们将进行P2P复制,以使两个SQL server保持一致。但是,我们在应用程序中使用的是EDM,它基于现有的服务器。如果我们添加另一个SQL server,我是否需要为第二个数据库创建另一组EDM。维护2个edmx文件将是一场噩梦。将来,出于可扩展性的目的,我们可能会添加另一台SQL服务器。一定有更好的方法,而不是让每个SQl服务器有一个单独的EDMX文件。此外,对于已经存在的使用EDM访问数据库的代码,我应该如何修改它,使其选择正确的数据库,从而成为EDM。目前,我的代码如下:
使用(var context = new MyCOmpanyModel.MyCompanyEntities()) { ....}
我不想在访问EDM的每个页面上都更改此设置。必须有一种更好的方法来选择SQL服务器(或实体),并在基本Page类或类似的类中设置它们。
任何帮助都将不胜感激。
发布于 2011-10-20 17:12:38
这听起来像是你要在相同的数据库服务器版本之间复制数据,用相同的模式托管数据库=不需要更改EDM,唯一需要更改的应该是第二个web服务器的连接字符串。
我想知道你为什么选择这个解决方案?为了实现高可用性,公司通常采用数据库的故障转移集群(主动/被动)和web服务器的负载平衡。Web服务器负载平衡对客户端是透明的,故障转移群集对web服务器是透明的。故障转移群集使用共享NAS或SAN存储(具有自己的高可用性功能,如RAID阵列和热插拔)。在主动/被动集群的情况下,您应该只需要主动服务器的SQL服务器许可证(如果最近没有更改)。
发布于 2011-10-21 03:25:34
谢谢你的回复。所以这就是你的建议:
<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对象,然后忘记它。
关于您的建议,为数据库服务器做集群,集群是昂贵的。它需要额外的硬件和软件。p2P复制似乎并不那么昂贵。不过,还是要感谢你的建议。
https://stackoverflow.com/questions/7828948
复制相似问题