2012-11-28 81 views
2

我注意到,當我使用EF創建模型優先數據庫時,它忽略了web.config連接字符串,並在後臺執行它自己的操作。然後,我找到了一種方法,像這樣在構造函數中設置自己的連接字符串。從web.config中獲取連接字符串以在EF POCO中使用?

public class MainDataContext : DbContext 
{ 
    public MainDataContext() 
    { 
     this.Database.Connection.ConnectionString = "MY CONNECTION STRING THAT IS ACTUALLY USED"; 
    } 
} 

問題:如何強制/設置它使用來自web.config的連接字符串?

我被告知,如果你的連接字符串的名字就像你的數據上下文一樣,它會起作用,但它對我沒有任何作用。我知道肯定它不起作用,如果我將它命名爲DefaultConnectionString

<add name="MainDataContext" providerName="System.Data.SqlClient" 
    connectionString="Server=(LocalDB)\\v11.0;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|ProjectDB.mdf;" /> 

當我嘗試從控制檯執行update-database -v -f時發生錯誤。

+0

您正在使用哪個版本的EF? – MMK

+0

@MMK 5.0?一個自帶的VS2012(MVC4) – sed

+0

嘗試類似於公共MainDataContext() :base(ConfigurationManager.ConnectionStrings [「MainDataContext」]) { } – MMK

回答

1

你可以嘗試這樣的事情:

public MainDataContext() : 
     base(typeof(MainDataContext).Name) 
    { 
    } 

你肯定在Web.config的連接字符串的聲明是正確的?像這樣:

<?xml version="1.0"?> 
<configuration> 
<connectionStrings> 
    <add name="MyDatabase" connectionString="server=localhost;User Id=user;password=password;Persist Security Info=True;database=mydatabase" providerName="MySql.Data.MySqlClient" /> 
</connectionStrings> 
</configuration> 
+0

同樣的事情。當我在構造函數中添加'this.Database.Connection.ConnectionString =「Server =(LocalDB)\\ v11.0; Integrated Security = SSPI; AttachDBFilename = | DataDirectory | ProjectDB.mdf;」;'' – sed

+0

是的,100%肯定。我的連接字符串看起來有點不同(見操作後),但我所做的只是編輯了'DefaultConnectionString'的名稱並編輯了連接字符串本身。 – sed

+0

只需檢查:您的自定義dbcontext是否在庫中聲明並且連接字符串位於庫的app.config文件中?因爲如果是這樣,您必須將連接字符串配置複製到要使用數據庫的應用程序的web.config/app.config中。我知道你提到了web.config,但問題似乎是這樣的,在錯誤的文件中聲明瞭配置。 –

相關問題