2010-10-04 102 views
1

我有一個名爲 「Config」的數據庫,其中有一個名爲「Customer」的表 在Customer表中,我持有登錄憑證以及連接字符串到客戶端的數據庫。Asp.net MVC2 - 多個數據庫

在我的控制器,我檢查,看見我查詢了哪些客戶數據庫

 String connectionString = ""; 
     if (id == 1) 
      connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Client1.mdf;Integrated Security=True;User Instance=True"; 
     else if (id == 2) 
      connectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\Client2.mdf;Integrated Security=True;User Instance=True"; 

     using (TestDbaseDataContext db = new TestDbaseDataContext(connectionString)) 
     { 
      var searchRecords = db.SearchRecords; 
      return View(searchRecords.ToList()); 
     } 

會有客戶使用不同的數據庫的人數不詳,這些連接字符串將改變基於歸檔狀態,和其他因素。我不認爲在app.config中編寫這些字符串將會做我所需要的。

我有一個「主」數據庫,它包含客戶端的所有配置設置以及客戶端的數據庫連接字符串。 mater數據庫僅用於緩解要搜索的客戶端數據庫。我將連接字符串存儲在master數據庫中,這樣我就可以爲登錄的客戶傳遞該連接字符串以查詢正確的數據庫。這是一個要求,讓每個客戶端在它自己的數據庫中

你將如何存儲這個連接字符串,所以我可以傳遞給我的datacontext需要時? 它應該存儲在會話變量中,還是應該在每個控制器方法中查詢Config數據庫Customer表?

+2

IMO,會話變量或加密的cookie非常適合這種情況。 – 2010-10-04 15:46:08

+0

我不認爲即使是加密的cookie在這裏也不是一個好主意 - 不需要將憑證發送到客戶端。 – 2010-10-04 15:58:18

+0

正確的,我不需要客戶端憑證,只是它們已經通過身份驗證,並且這是如何訪問數據庫(ConnectionString) – 2010-10-04 16:13:56

回答

1

我以前設置了一個類似的「孤島」多客戶端應用程序。這是會話變量的一個很好的例子。每個用戶都與一個擁有自己的數據庫的客戶端相關。在登錄時,每個用戶都應該在會話狀態中獲得一個包含所有必要標識數據的「上下文」對象,包括數據庫連接字符串。

+0

您可以展開一個會話狀態的上下文對象嗎? – 2010-10-04 16:02:13

+0

您的客戶表中的數據可以合併到可存儲在會話狀態中的客戶對象中。這將使您的Web應用程序輕鬆使用這些數據。 – 2010-10-04 16:10:43