如果我正確地理解了你,那麼你需要動態地連接到不同的數據庫,而無需修改你的代碼。假設您有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