为了实现高可用性,我们公司正在添加一个新的Web服务器和SQL服务器。我们将进行P2P复制,以使两个SQL服务器保持一致。但是,我们在应用程序中使用EDM,它基于现有服务器。如果我们添加另一个SQL服务器,是否需要为第二个数据库创建另一组EDM。维护2个edmx文件将是一场噩梦。并且可能在将来出于可编程目的,我们添加另一个SQL服务器。必须有一个更好的方法,然后为每个SQl服务器单独的EDMX文件。此外,对于使用EDM访问数据库的现有代码,我应该如何修改它以便选择正确的数据库,因此它是EDM。目前,我的代码如下:
使用(var context = new MyCOmpanyModel.MyCompanyEntities()){....}
我不想在访问EDM的每个页面上更改此设置。必须有一种更好的方法来选择SQL服务器(或实体),并将它们设置在基页类或类似的东西中。
任何帮助将不胜感激。
答案 0 :(得分:1)
听起来您要在使用相同架构托管数据库的相同数据库服务器版本之间复制数据=无需更改EDM,唯一需要的更改应该是第二个Web服务器的连接字符串。
我很想知道你为什么选择这个解决方案?实现高可用性公司的Imho通常会针对数据库进行故障转移群集(主动/被动)并为Web服务器进行负载平衡。 Web服务器负载平衡对客户端是透明的,故障转移群集对Web服务器是透明的。故障转移群集使用共享NAS或SAN存储(具有自己的高可用性功能,如RAID阵列和热交换)。在主动/被动群集的情况下,您应该只需要活动服务器的SQL Server许可证(如果最近没有更改)。
答案 1 :(得分: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))
{
}
我不想在几乎每个页面上都放置上面的检查服务器代码。如果我们稍后再向netwrok添加一个sql server,那将是一个很大的麻烦。有没有更好的方法在应用程序中设置一次服务器连接字符串或ObjectContext obj,只是忘了它。
关于为数据库服务器进行群集的建议,群集很昂贵。它需要额外的硬件和软件。 p2P复制似乎并不那么昂贵。但是,感谢您的建议。