35

我正在EF5中使用MVC 4 aspnet網站。 本地,一切都運行得很好,但是當我把它發佈到IIS並嘗試進入,我得到的錯誤'System.Data.Entity.Internal.AppConfig'的類型初始值設定項引發異常

「的類型初始爲‘System.Data.Entity.Internal.AppConfig’ 拋出例外。」

詳細的異常

出錯創建 的EntityFramework配置節處理程序:對的DbContext類型配置 'GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data' 是在 應用程序配置中指定了多次。每個上下文只能配置一次。 (E:\軟件\ web.config行104)

我在StackOverflow的檢查以前的問題,我已經卸載並通過的NuGet的EntityFramework重新安裝,並檢查了每個參考它在每一個項目都是EF5。我還檢查了每個項目中選定的框架是4.5。

任何想法,什麼可能會導致這個問題? 謝謝!吉列爾莫。

的web.config

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
    For more information on how to configure your ASP.NET application, please visit 
    http://go.microsoft.com/fwlink/?LinkId=169433 
    --> 
<configuration> 
    <configSections> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 

    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections> 
    <connectionStrings> 
    <add name="GdpSoftwareConnectionString" connectionString="Persist Security Info=False;User ID=user;Password=password;Initial Catalog=databasename;Data Source=server" providerName="System.Data.SqlClient" /> 
    <add name="GdpSoftware.Server.Data.GdpSoftwareDbContext" connectionString="GdpSoftware.Server.Data.GdpSoftwareDbContext_ConnectionString" providerName="System.Data.SqlClient"/> 
    <add name="GdpSoftware.Server.Ui.Web.Models.UsersContext" connectionString="GdpSoftware.Server.Ui.Web.Models.UsersContext_ConnectionString" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <appSettings> 
    <add key="webpages:Version" value="2.0.0.0" /> 
    <add key="webpages:Enabled" value="false" /> 
    <add key="PreserveLoginUrl" value="true" /> 
    <add key="ClientValidationEnabled" value="true" /> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true" /> 
    </appSettings> 
    <system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" /> 
    <authentication mode="Forms"> 
     <forms loginUrl="~/Account/Login" timeout="2880" /> 
    </authentication> 
    <pages> 
     <namespaces> 
     <add namespace="System.Web.Helpers" /> 
     <add namespace="System.Web.Mvc" /> 
     <add namespace="System.Web.Mvc.Ajax" /> 
     <add namespace="System.Web.Mvc.Html" /> 
     <add namespace="System.Web.Optimization" /> 
     <add namespace="System.Web.Routing" /> 
     <add namespace="System.Web.WebPages" /> 
     </namespaces> 
    </pages> 
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT--> 
    <customErrors mode="Off" /> 
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT--> 
    </system.web> 
    <system.webServer> 
    <!-- BEGIN - TO SEE THE ERRORS ON THE DEPLOYMENT--> 
    <httpErrors errorMode="Detailed" /> 
    <asp scriptErrorSentToBrowser="true" /> 
    <!-- END - TO SEE THE ERRORS ON THE DEPLOYMENT--> 
    <validation validateIntegratedModeConfiguration="false" /> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" /> 
     <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" /> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    <staticContent> 
     <mimeMap fileExtension=".mustache" mimeType="text/plain" /> 
    </staticContent> 
    <security> 
     <requestFiltering> 
     <fileExtensions> 
      <add fileExtension=".mustache" allowed="true" /> 
     </fileExtensions> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
    <runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> 
     <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Castle.Windsor" publicKeyToken="407dd0808d44fbdc" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-4.5.0.0" newVersion="4.5.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Microsoft.Owin.Host.SystemWeb" publicKeyToken="31bf3856ad364e35" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" /> 
     </dependentAssembly> 
     <dependentAssembly> 
     <assemblyIdentity name="Castle.Core" publicKeyToken="407dd0808d44fbdc" culture="neutral" /> 
     <bindingRedirect oldVersion="0.0.0.0-3.2.0.0" newVersion="3.2.0.0" /> 
     </dependentAssembly> 
    </assemblyBinding> 
    </runtime> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" /> 
    <contexts> 
     <context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true"> 
     <databaseInitializer type="System.Data.Entity.MigrateDatabaseToLatestVersion`2[[GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data], [GdpSoftware.Server.Data.Migrations.Configuration, GdpSoftware.Server.Data]], EntityFramework" /> 
     </context> 
    </contexts> 
    </entityFramework> 
</configuration> 

回答

21

我需要通過defaultConnectionFactory改變是,而不是默認

<entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"> 
    <parameters> 
     <parameter value="<My Connection String>" /> 
    </parameters> 
    </defaultConnectionFactory> 
</entityFramework> 

http://blogs.msdn.com/b/davidobando/archive/2012/08/14/changing-ef-s-default-provider-from-localdb-to-sql-server.aspx

+0

非常感謝指出了這一點......我一直在敲打着我的大腦。就試圖弄清楚爲什麼EF代碼首先是創造我上的LocalDB而不是在SQL Server數據庫就像我在我的connectionString已經指定 – levininja

+2

我不得不這樣做,而且還添加提供程序是這樣的:' <提供商invariantName = 「System.Data.SqlClient的」 類型= 「System.Data.Entity.SqlServer.SqlProviderServices,EntityFramework.SqlServer」/> '爲[文檔](在指定http://msdn.microsoft.com/en-us /data/jj556606.aspx#Providers)。 – levininja

0

我認爲這個問題是從這一行:

我不知道你爲什麼使用這種方法,以及它如何工作的?

也許最好是嘗試從web.config中取出並轉到另一種方式

+1

由於朱莉婭·勒曼(EF組成員)seuggested我配置初始化器從配置文件。 – polonskyg

66

執行以下操作在App.config文件中,

  1. connectionStrings元素是configSections元素之後。
  2. startup元素放在connectionStrings元素之後。
<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
     <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=4.3.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" /> 
    </configSections> 
    <connectionStrings> 
     <add name="SchedulingContext" connectionString="Data Source=XXX\SQL2008R2DEV;Initial Catalog=YYY;Persist Security Info=True;User ID=sa;Password=XXX" providerName="System.Data.SqlClient"/> 
    </connectionStrings> 
    <startup> 
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup>  
</configuration> 
+7

你能解釋一下爲什麼嗎? – Flater

+2

在'connectionString'節之後移動'startup'爲我做了竅門。謝謝。 –

+0

我以前把我的連接字符串放在任意位置,所以這解決了我的問題。謝謝! –

4

我發現SqlConnectionFactory,取消實體框架的引用,並安裝最新版本的實體NuGet的框架解決了這個問題。它會在安裝過程中爲您重新創建所有必需的條目。

0

如果您要爲app.config維護一個更多的cinfiguration文件,請不要在父頁面中包含任何鍵。

父頁:app.config中

<appSettings configSource="appSettings.config"> 
    <add key="ClientSettings" value="venice" /> <!-- Don't add Key Here --> 
</appSettings> 

子頁面:appSettings.config

<appSettings> 
    <add key="ClientSettings" value="venice"/> <!-- add Here --> 
</appSettings> 
0

web.configApp.Config搜索,如果你有沒有在你的項目,或者你使用一些標籤沒有你的參考資料。

0

我有同樣的問題。一天後,我明白了。

問題來自mailSettings中的smtp標記在<system.net>之下。

1

我在我的web.config中指定了多個provider

<providers> 
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6" /> 
     <provider invariantName="MySql.Data.MySqlClient" type="MySql.Data.MySqlClient.MySqlProviderServices, MySql.Data.Entity.EF6, Version=6.9.6.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d"></provider> 
    </providers> 

我只是刪除其中的一個,它的工作。我使用的是MySQL雖然

,不是TSQL

0

我今天有這個錯誤上運行在onother MVC應用程序虛擬文件夾嵌套的MVC應用程序。在我的情況下,InnerException比主要的更有價值。它是說:

- The entry 'DbContextMain' has already been added. (C:\inetpub\...\web.config line x) 

在嵌套的應用程序中修復重複的連接字符串後,一切正常。

0

如果您使用ASP.NET和IISExpress轉到「C:\ Users \\ Documents \ IISExpress \ config \ applicationhost.config」,搜索您的項目並查看是否有錯誤的virtualDirectory條目。

2

我打破了我的頭在這個問題上,終於在這裏是爲我工作: -

第一步:卸載實體框架使用NuGet包管理器

第二步:從App.config中

刪除的EntityFramework元素

第3步:重新安裝所需的實體框架版本。

第4步:刪除Migrations表和Migrations文件夾。

第五步:啓用遷移和

+0

非常感謝你這樣做。根據所使用的ASP.NET版本的不同,我總是遇到EF安裝不同版本的問題。結果,我總是最終安裝,如果幾次得到正確的。清除web.config中的舊垃圾修復了這個問題,謝謝。 –

1

我跑了添加遷移和更新數據庫到這個問題時,我忘了把我的Connections.config文件「複製總是」

BareMessage =「無法打開configSource文件'Connections.config'。」

+0

是的,如果您爲連接字符串使用單獨的配置文件,則可能會出現此錯誤,例如'<的ConnectionStrings configSource = 「connections.config」/>',並且不connections.config'複製'到輸出目錄。 –

0

我面臨類似的問題,並改變defaultConnectionFactory爲SqlConnectionFactory幫助我解決它。

0

實際的錯誤時,拋出消息=無法識別的元素在web.config中 所以從web.config文件「供應商」刪除供應商部分

0

的普遍問題就是涉及到計算機/網絡/應用的configs任何問題。

我在Machine.config中相同的連接字符串在我App.Config中,所以我我的第一個連接字符串之前,我App.Config中把

相關問題