2009-07-27 75 views
13

我需要根據環境變量爲Linq to Sql設置連接字符串。我有一個函數,它會根據環境變量從web.config返回連接字符串,但是如何讓Linq始終使用這個「動態創建的」連接字符串(最好不必每次指定它)?Linq to Sql - 根據環境變量動態設置連接字符串

我知道我可以使用構造函數指定連接字符串,但是如何在LinqDataSource中使用datacontext時工作?

回答

18

使用:

MyDataClassesDataContext db = new MyDataClassesDataContext(dynamicConnString); 

對於使用LinqDataSource,攔截ContextCreating事件和手動創建的DataContext如上:

protected void LinqDataSource_ContextCreating(object sender, LinqDataSourceContextEventArgs e) 
{ 
    e.ObjectInstance = new MyDataClassesDataContext (dynamicConnString); 
} 

MSDN

缺省情況下,使用LinqDataSource控制 創建一個類型的實例 在ContextTypeName 屬性中指定。 LinqDataSource控件 調用 數據上下文對象的默認構造函數來創建該對象的一個​​ 實例。可能有 ,您必須使用非默認的 構造函數,或者您必須創建一個 對象,該對象與ContextTypeName 屬性中指定的一個對象 不同。在這種情況下,您必須 處理ContextCreating事件和 手動創建數據上下文 對象。

2
+0

當使用DataContext和LinqDataSource時,這是否工作?例如,如何設置連接字符串: Ryan 2009-07-27 16:16:51

+0

是 - 正如喬什已經解釋的那樣。你應該在你原來的問題中指定這個。 – RichardOD 2009-07-28 07:59:54

6
  • 開拓LINQ to SQL設計,並打開設計(架構本身)的屬性選項卡中,展開連接並設置Application SettingsFalse。保存。

  • 關閉並打開您的DataContext設計器文件(dbml_name.designer.cs)並更改DataContext構造函數。當您關閉應用程序範圍設置時,您將立即注意到您的連接字符串如何決定跳入此處。所以這裏重點關注的部分是改變繼承者。重命名爲ConnString「,以適合您自己。我還注意到這個班上的DatabaseAttribute,我認爲這不是很重要,並且對連接設置有任何影響。您還需要System.Configuration參考:)

    公共dbDataContext(:基地(ConfigurationManager.ConnectionStrings [ 「MyConnString」]的ConnectionString,mappingSource)

  • 打開App.configWeb.config項目功能在您的LINQ到SQL類駐留,並將連接字符串重命名爲您定義爲「MyConnString」

  • 現在必須切斷與名稱更改整個條目,並將其粘貼到無論是App.config或者是訪問數據,如Web應用程序,Silverlight的,WPF應用Web.config WCF等,這是很重要你改變了訪問數據的調用應用程序的配置文件,因爲在你的LINQ to SQL類中定義的ConfigurationManager將從調用應用程序執行的文件中尋找.config文件,而不管你的LINQ to SQL類在哪裏已被定義。正如你所看到的,它與以前有些不同。

  • 現在,點擊鼠標右鍵,打開您的DAL或包含您的LINQ to SQL類項目的屬性,並刪除連接字符串「應用程序設置」設置選項卡上的參考。

  • 重建。你們都已經完成了,現在只需在文件中查找檢查你的數據庫名稱,你可能知道它是連接字符串中的特徵,用於檢查是否有任何失敗者,不應該有任何失敗。