4

我正在創建一個具有經典體系結構的WPF應用程序:UI層,業務邏輯層和基礎結構層。我決定將配置分成兩個文件:包含常用應用配置的app.config文件和包含連接字符串的dll.config,以便在DbContext中用於域模型存儲。第二個.config文件應該粘貼到業務邏輯DLL上,而第一個文件粘貼到相應的UI可執行文件(將自己的配置再多一個UI)。如何指定實體框架代碼外部企業庫配置文件中的第一個連接字符串

的app.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="enterpriseLibrary.ConfigurationSource" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.ConfigurationSourceSection, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 

    <enterpriseLibrary.ConfigurationSource selectedSource="Winter DAL Configuration"> 
    <sources> 
     <add name="Winter DAL Configuration" type="Microsoft.Practices.EnterpriseLibrary.Common.Configuration.FileConfigurationSource, Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 
     filePath="dll.config" /> 
    </sources> 
    </enterpriseLibrary.ConfigurationSource> 
</configuration> 

dll.config:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <configSections> 
    <section name="dataConfiguration" type="Microsoft.Practices.EnterpriseLibrary.Data.Configuration.DatabaseSettings, Microsoft.Practices.EnterpriseLibrary.Data, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="true" /> 
    </configSections> 
    <dataConfiguration defaultDatabase="WinterContext" /> 
    <connectionStrings> 
    <add name="WinterContext" connectionString="Data Source=Winter.sdf" 
     providerName="System.Data.SqlServerCe.4.0" /> 
    </connectionStrings> 
</configuration> 

現在,當我開始應用,的DbContext拋出一個異常說,它不能找到指定名稱的連接字符串。如果我將連接字符串從dll.config移動到app.config - 所有工作正常。

也許我必須顯式加載配置?或?..我做錯了什麼?

Thx提前!

回答

0

我希望我理解你的問題,你想構建你的app.configs作爲一個層次,這是有效的,在Web應用程序,這是非常普遍的,最簡單的方法,讓.NET幫助您與合併是specifiying的有界在所有需要配置的app.config的地區,並在內部配置直到你最後一個可以覆蓋值,例如:

ROOT的AppConfig

<configuration> 
<commonCollection> 
    <add key="first" value="1" /> 
    <add key="second" value="2" /> 
    <add key="third" value="3" /> 
</commonCollection> 
</configuration> 

INNER的AppConfig

<configuration> 
<commonCollection> 
    <remove key="first" />   
    <add key="first" value="10" /> 
</commonCollection> 
</configuration> 

結果:

ROOT的AppConfig

first : 1 
second: 2 
third: 3 

INNER AppConfig的

first: 10 
second: 2 
third: 3 

編輯

您的EF範圍內,設置連接字符串中的常量ructor:

public MyContextDB() :base("name=DefaultConnection") 
{ 
//other initializers 
} 

希望它能幫助,

+0

我想通過企業庫配置的方式來構造我的配置。據我所知,你的解決方案在這裏不起作用。我正在使用Enterprise Library配置,因爲稍後我會將Logging,Exception handling,Validation,Unity等添加到dll.config文件中。這將是每個用戶界面模塊的具體配置... – Danil

+0

而我創建DbContext正如你所指出的,使用base(...)構造函數,但它會引發我提到的異常。 – Danil

3

根據提供的配置文件,實體框架去尋找在啓動項目的根的app.config中,並沒有找到EF內容。特別是連接字符串。 當你第一次使用UF時,它會創建這樣的條目,可能在模型項目中。 使用EF5.0的即時通訊如此小心,在實體部分進行剪切和粘貼。

<configuration> 
<configSections> 
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
</configSections> 
<startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
</startup> 
<entityFramework> 
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
    <parameters> 
    <parameter value="v11.0" /> 
    </parameters> 
</defaultConnectionFactory> 
</entityFramework> 
<connectionStrings> 

<add name="CONTEXT_NAME_HERE" 
    providerName="System.Data.SqlClient" 
    connectionString="Data Source=YOURDB_SERVER;Initial Catalog=YOUR_DBNAME;Integrated Security=True;MultipleActiveResultSets=True;App=EntityFramework" /> 

</connectionStrings> 
</configuration> 
+0

你將如何輸入你的用戶名和密碼的SQLServer實例? – Ody

相關問題