3

我不能使用配置文件,我必須在運行時初始化數據庫連接。它是SQL Server 2008數據庫。如何處理EF 4.1的運行時動態連接字符串?

由於我更新EF到更新的ADO.NET實體框架4.1 - 更新1,Database.Connection.ConnectionString不再適用於我。配置文件中的連接字符串對我來說工作正常,但我需要動態定義它。所以,我發現其他流行的方式通過DefaultConnectionFactory做這樣的:

Database.DefaultConnectionFactory = 
    new SqlConnectionFactory("Server=local;Initial Catalog=Db1;Trusted_Connection=True;") 

然而,在情況下,我得到了錯誤信息試圖訪問任何DbSet派生類對象:提供者未返回ProviderManifestToken字符串。 ---> System.Data.SqlClient.SqlException:建立到SQL Server的連接時發生網絡相關或實例特定的錯誤。服務器未找到或無法訪問。驗證實例名稱是否正確,並將SQL Server配置爲允許遠程連接。 (提供程序:命名管道提供程序,錯誤:40 - 無法打開連接到SQL Server)

更新:我遇到問題只在案件數據庫尚未創建,並應由EF重建。如果存在,則不會發生此類異常,因爲我查詢數據的Db。如果我在配置文件中定義完全相同的連接字符串,這兩種情況對我來說都很好(數據庫生成和數據查詢)

我在做什麼錯? 謝謝

+0

「我不能使用配置文件」 - 嗯....爲什麼不? – RPM1984

+0

,因爲連接字符串只在運行時被知道,它是基於用戶認證動態構建的 – YMC

回答

0

你仍然可以使用一個配置文件,配置以默認值開始,你可以在運行時改變這個值,這具體是什麼設計,可以設置爲應用程序範圍或每個用戶範圍。因此,從一個空配置設置開始,在運行時建立你的字符串,並將其設置爲配置文件,並讓你的應用程序讀取它,我經常這樣做。

,當我開始工作

+0

我一直在運行時向app.config添加條目,但EF似乎沒有讀取它。有小費嗎? –

3

您可以使用EntityConnectionStringBuilder類來構建上下文的連接字符串我會發布一些示例代碼,我處理方式這一明天,

EntityConnectionStringBuilder entityBuilder =new EntityConnectionStringBuilder(); 
entityBuilder.Provider = "provider"; 
entityBuilder.ProviderConnectionString = "connectionString"; 

和通當創建dbContext

YourContext(entityBuilder.ToString()) 
+0

Database.DefaultConnectionFactory和Database.Connection.ConnectionString在使用或不使用此EntityConnectionStringBuilder時仍然不適用於我。然而,事實證明,將連接字符串傳遞給基類的方式是唯一適用於生成新的Db模式和日期查詢的方法。好吧,我可以使用基類構造函數來傳遞連接字符串,但我仍然很好奇爲什麼其他兩種方式爲我在過去的EF版本上工作,不再使用最新的EF版本。 – YMC