2014-05-12 171 views
3

我使用EF 6.1 Code First。我在編程一樣運行配置連接字符串:實體框架提供程序配置

myContext.Database.Connection.ConnectionString = "Data Source=(localdb)\v11.0;Initial Catalog=MyDb;Integrated Security=True;" 

這工作得很好,但只有當我保留一些鍋爐板連接信息在我的應用程序/ web.config中:

<connectionStrings> 
    <add name="MyDb" connectionString="Data Source=NOTUSED;Initial Catalog=NOTUSED;" providerName="System.Data.SqlClient" /> 
    </connectionStrings> 

我懷疑這是因爲我沒有提供提供者信息。我指定供應商和defaultConnectionFactory段(SQL服務器/ LocalDbConnectionFactory),但它似乎並不關心:

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    <providers> 
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" /> 
    </providers> 
    </entityFramework> 

如果我刪除連接字符串部分,它會嘗試連接到那並不是一個MDF文件牛逼存在:

System.Data.SqlClient.SqlException:無法附加文件 'C:\我的 項目\ App_Data文件\ MyDb.mdf' 數據庫MYDB。

通常情況下,localdb連接字符串會生成到c:\ users \ my_user \ MyDb.mdf的路徑。所以它似乎不使用LocalDb工廠,除非我的.config文件中有連接字符串部分。

如何在每個上下文基礎上指定EF從該連接字符串節點獲取的providerName信息?或者我在這裏咆哮錯誤的樹?

回答

2

這可能與您構建連接的方式有關。如果您使用的DataContext的默認構造函數,那麼它會嘗試從配置文件中找到你的連接字符串:

MyDbContext myContext = new MyDbContext() <- this uses the default constructor 
myContext.Database.Connection.ConnectionString = "_conn_str_" 

如果您通過在連接字符串中的構造函數,那麼你不應該需要的配置文件條目:

using (MyDbContext myContext = new MyDbContext("_conn_str_")) { 
    // the above line should not need an entry in the config file 
} 

希望這有助於。

+0

這是正確的。我很抱歉沒有確認這一點。如果你願意,我可以創建另一個賞金問題並以這種方式獎勵積分。 – RMD

+0

嗨RMD,那太棒了。很高興它解決了你的問題。 – blorkfish

相關問題