1

我有多個數據庫說DB1,DB2,DB3和MembershipDB。 每個數據庫都有一個GUID列,名爲ApplicationID &一組用戶的MembershipID爲GUID。 每個數據庫的每個用戶都與其他數據庫的用戶隔離(與此無關)。 會員數據庫包含用戶MembershipID和數據庫的的applicationID,密碼,用戶名,電子郵件等
從多個數據庫提取數據

我需要建立一個共同的登錄系統,如當用戶提供了登錄證書認證從MembershipDB完成,他的數據是從他註冊的數據庫中提取。
例如:來自DB1的用戶提供了他的登錄詳細信息,身份驗證是從membershipDB完成的。現在,他的數據的其餘部分將從DB1中獲取(因爲他已註冊到DB1)到他的儀表板。我有點困惑如何建立這個登錄系統。
認證部分沒有問題。但是,如何連接到正確的數據庫以獲取用戶的正確數據。
歡迎提供所有有價值的意見和建議。

我使用的是Microsoft SQL Server 2008中,實體框架4.2(IST數據庫的方法),WCF,asp.net MVC 4

回答

0

在成員船DB,你應該有一個列記錄的數據庫該用途的去 例如: ID,用戶名,密碼的applicationID,電子郵件,數據庫名

select * from membershipdb where username='user1', and password = 'password1'. 
//Code to fetch the database 
//rs = recordset 
//This assume these two database in same server 
String DB = rs.getString(6) // 6 is DBName 

DBobj->executeQuery("USE "+DB); 
DBobj->executeSelect("select * from DB1.Table1 where Column1 = 'column1'"); 

//如果數據庫在不同的服務器上,您可以連接到服務器2,並分配給DBobj2 //然後使用與上面類似的方法

+0

感謝邁克爾,但考慮到這種情況最初有一個月左右的數據庫db1 db2和membershipdb之後會有4個以上的數據庫。所以很難遵循你的方法。 – coddey 2012-01-30 05:53:25

0

如果我正確地理解了你,那麼你需要動態地連接到不同的數據庫,而無需修改你的代碼。假設您有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=&quot;Data Source=Customer1ServerName;Initial Catalog=DatabaseCustomer1;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True&quot;" 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=&quot;Data Source=Customer2ServerName;Initial Catalog=DatabaseCustomer2;Persist Security Info=True;User ID=userid;Password=password;MultipleActiveResultSets=True&quot;" 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文件中添加新的連接字符串

如果您需要更詳細的信息,請讓我知道。

+0

Hello Arvind!感謝您的建議。請您詳細說明您的建議! – coddey 2012-01-30 08:29:57

+0

該解決方案假定客戶的所有特定數據庫都使用相同的模式。因此,您只需創建一次實體框架映射,並通過傳遞不同的連接字符串即可連接到客戶特定的數據庫。如果你仍然需要更多的解釋,那麼我們可以聊天。 – 2012-01-31 08:41:25

+0

其更好的v可以聊天! [email protected] – coddey 2012-01-31 08:45:58