如果我正确地理解了你,那么你需要动态地连接到不同的数据库,而无需修改你的代码。假设您有2个客户Customer1和Customer2。您为这些客户创建了名为Database_Customer1和Database_Customer2的2个数据库。
将实体框架映射到任何客户数据库的名称为“CustomerDbSpecificEntities”的实体框架。
现在您需要在.config文件中添加以下连接字符串。
<add name="Database_Customer1_Entities" connectionString="metadata=res://*/CustomerDbSpecific.csdl|res://*/CustomerDbSpecific.ssdl|res://*/CustomerDbSpecific.msl;provider=System.Data.SqlClient;provider connection string="Data Source=Customer1ServerName;Initial Catalog=DatabaseCustomer1;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
<add name="Database_Customer2_Entities" connectionString="metadata=res://*/CustomerDbSpecific.csdl|res://*/CustomerDbSpecific.ssdl|res://*/CustomerDbSpecific.msl;provider=System.Data.SqlClient;provider connection string="Data Source=Customer2ServerName;Initial Catalog=DatabaseCustomer2;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True"" providerName="System.Data.EntityClient" />
在数据访问层的代码,
String ConnectionStringName = MembershipDBProvider.GetConnectionStringNameForCustomer(CustomerName);
using (CustomerDbSpecificEntities context = new CustomerDbSpecificEntities("Name=" + ConnectionStringName))
{
//use context here
}
创建公共数据库(会员数据库)的表(CustomerDbConnection)来存储客户名称和它的数据库连接字符串名称的映射。
'GetConnectionStringNameForCustomer(CustomerName)'在CustomerDbConnection表中进行搜索并返回给定客户的连接字符串名称。它用于建立与客户特定数据库的连接。
现在,如果您将来有新客户,则必须进行以下更改, 1.在CustomerDbConnection中添加新行。 2.在.config文件中添加新的连接字符串
如果您需要更详细的信息,请让我知道。
感谢迈克尔,但考虑到这种情况最初有一个月左右的数据库db1 db2和membershipdb之后会有4个以上的数据库。所以很难遵循你的方法。 – coddey 2012-01-30 05:53:25