2015-02-10 74 views
0

我正在C#中使用Visual Studio 2013 .Net 4.5創建一個dll項目。該項目包含一個使用EF6的實體模型。我的dll將作爲外部應用程序的插件被調用,它屬於某些硬件產品的軟件套件。在使用外部啓動應用程序的應用程序配置中找不到連接字符串

我有視覺工作室成立這樣當我按調試它會啓動這個外部應用程序(我將其稱爲網關),這反過來又使調用我的DLL,讓我調試。

當我的dll嘗試調用實體模型時,會發生該問題。我得到:

出現InvalidOperationException - 「System.InvalidOperationException」類型的未處理的異常在ENTITYFRAMEWORK.dll

發生實體‘「沒有命名的連接字符串’可能會在應用程序配置文件中找到。現在

,我的配置文件了,很清楚,這是由VS加入時,我建立模型所需的連接字符串。我已閱讀所有類似的線程到這個問題,並將連接字符串添加到配置不是問題。

網關確實知道實際的數據庫實例,並且在配置中給出連接字符串。但是,實體連接字符串和實例連接字符串不同,因爲由VS和EF添加的實體術語。

我能夠創建一個控制檯應用程序,這使得我的DLL調用,能夠使enity調用。我必須爲控制檯應用程序提供對我的dll和實體框架的引用,並將連接字符串添加到控制檯應用程序配置文件中。

這使我相信,任何應用程序,使通話到我的DLL必須有EF的知識和連接字符串。

這是這種情況?如果是這樣的話,我覺得我將無法將EF用於此項目,因爲我無法讓網關知道EF。

感謝您的輸入!

回答

0

所以我會做什麼在這種情況下作出新的語境下,從當前的情況下,並在構造函數傳遞連接字符串中繼承。

或者,您也可以創建一個連接字符串,然後您可以傳入構造函數重載您的上下文。

public string GetConnectionString() 
    { 
     string connectionString = new EntityConnectionStringBuilder 
     { 
      Metadata = "res://*/Data.System.csdl|res://*/Data.System.ssdl|res://*/Data.System.msl", 
      Provider = "System.Data.SqlClient", 
      ProviderConnectionString = new SqlConnectionStringBuilder 
      { 
       InitialCatalog = ConfigurationManager.AppSettings["SystemDBName"], 
       DataSource = ConfigurationManager.AppSettings["SystemDBServerName"], 
       IntegratedSecurity = false, 
       UserID = ConfigurationManager.AppSettings["SystemDBUsername"], 
       Password = ConfigurationManager.AppSettings["SystemDBPassword"], 
       MultipleActiveResultSets = true, 
      }.ConnectionString 
     }.ConnectionString; 

     return connectionString; 
    } 
+0

什麼我在這裏做的是改變我的DbContext的構造方法來連接字符串。然後,我像你一樣建立了連接字符串,並將其傳入並將其拉直。 – Swoody17 2015-02-10 17:33:38

0

不能您撰寫的實體基於SQL連接字符串的ConnectionString?

Otherwhise看看這個問題:How to have DLL specific config file?

Basicly你提供的dll文件一個配置。因此,除了myapplication.exe.config,你可以有一個myddl.dll.config

相關問題