2012-05-09 49 views
10

我有幾個數據庫,他們的架構是相同的。當我使用database-first時,創建edmx文件時會指定連接字符串。我想知道,有沒有辦法改變連接字符串?這是,所以我可以選擇運行哪個數據庫。 Thx提前!有沒有辦法改變數據庫中的連接字符串?

回答

4

更改web.config文件中的連接字符串。

<connectionStrings> 
    <add name="SandBoxEntities" connectionString="metadata=r... /> 
    </connectionStrings> 

我略實際的連接字符串,因爲它並不重要 - 只是想給你的web.config文件中尋找什麼的想法。

您還可以編程方式更改連接字符串。檢查出Example 16.2. Programmatically modifying an EntityConnectionString

+0

我知道如何設置連接字符串在web.config中,我想知道的是如何在運行時改變它,這是,所以我可以選擇使用哪個數據庫。當我創建edmx文件時,連接字符串已經設置,有沒有辦法在運行時改變它? – James

+0

好的 - 我編輯了我的答案,並給了你一個鏈接,告訴你如何做到這一點。 –

+0

這個問題和答案把整個事情放在一個方便的概括:http://stackoverflow.com/questions/14440698/setup-entity-framework-for-dynamic-connection-string。 –

22

我們不會在我們的web.configs中存儲連接字符串,因此接受的解決方案不適用於我們。如果你只是試圖通過提供基本的DbContext構造連接字符串,你會得到以下異常:

使用數據庫優先和模型優先發展的T4模板可能無法正常工作,如果在代碼中使用

代碼生成第一模式。要繼續使用Database First或Model First,請確保在執行應用程序的配置文件中指定了實體框架連接字符串。要使用這些類,這些類是從Database First或Model First生成的,使用Code First添加任何使用屬性或DbModelBuilder API的其他配置,然後刪除引發此異常的代碼。

要解決這個問題,創建一個分部類的情況下,如下所示和形式進行額外的EF元數據的連接字符串(其中MyContext是你背景型號名稱(如型號名稱是MyModel.edmx,比在代碼中MyContext以下替換MyModel與所有三個擴展.csdl,.ssdl,使用.msl)):

public partial class MyContext 
{ 
    public MyContext(string connStr) 
     : base(string.Format(@"metadata=res://*/MyContext.csdl|res://*/MyContext.ssdl|res://*/MyContext.msl;provider=System.Data.SqlClient;provider connection string='{0}'", connStr)) 
    { 
    } 
} 
+1

爲了使這項工作對我而言,我需要將"更改爲單引號,如此答案中所述:http://stackoverflow.com/a/7004173/994464 – Brenton

+0

直截了當且簡單。 –

1

您可以在web.config中定義多個連接字符串,然後在你的代碼或者使用它們你的工作。 例如:`

<connectionStrings> 
    <add name="conStr1" connectionString="metadata=r... /> 
</connectionStrings>` 

<connectionStrings> 
    <add name="conStr2" connectionString="metadata=r... /> 
</connectionStrings>` 

和你的上下文類的構造函數獲取連接字符串名稱作爲參數:

public MyContext(string connStr) 
    : base(connStr) { } 

確定。現在你可以在你的代碼中使用如下:

using (var db = new MyContext("name=conStr1")) 
{ 
    //your code here 
} 

然後

using (var db = new MyContext("name=conStr2")) 
{ 
    //your code here 
} 
相關問題