Подтвердить что ты не робот

Инициализатор типа для "System.Data.Entity.Internal.AppConfig" бросил исключение

Я работаю с EF5 на веб-сайте MVC 4 aspnet. Локально все работает нормально, но когда я публикую его в IIS и пытаюсь войти, я получаю сообщение об ошибке

"Инициализатор типа для 'System.Data.Entity.Internal.AppConfig' бросил исключение".

Подробное исключение

Произошла ошибка при создании обработчика раздела конфигурации для entityFramework: Конфигурация для типа DbContext "GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data 'указывается несколько раз в конфигурации приложения. Каждый контекст может быть настроен только один раз. (E:\App\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>
4b9b3361

Ответ 1

Мне нужно было изменить по умолчаниюConnectionFactory как SqlConnectionFactory вместо стандартного

<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

Ответ 2

Сделайте следующее в файле App.config,

  • Поместите элемент connectionStrings после элемента configSections.
  • Поместите элемент 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>

Ответ 3

Я обнаружил, что удаление ссылок на Entity Framework и установка последней версии Entity Framework из NuGet устранили проблему. Он воссоздает все необходимые записи для вас во время установки.

Ответ 4

Я сломал себе голову над этой проблемой и, наконец, вот что сработало для меня: -

Шаг1: Отменить инфраструктуру Entity с помощью диспетчера пакетов Nuget

Шаг 2: Удалить элемент Entityframework из App.config

Шаг 3. Переустановите желаемую версию Entity Framework.

Шаг4: удалите таблицу миграции и папку Migrations.

Шаг 5. Включение миграции и добавление базы данных миграции и обновления

Ответ 5

У меня было несколько provider, указанных в моем web.config.

 <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

Ответ 6

Я столкнулся с этой проблемой, когда забыл установить файл Connections.config для "копирования всегда"

BareMessage = "Невозможно открыть файл configSource 'Connections.config'."

Ответ 7

Я также столкнулся с той же проблемой, однако в моем случае у моего решения есть консольное приложение и библиотека классов EF, которая в основном взаимодействует с базой данных. Я удалил настройки конфигурации, связанные с EF, из конфигурации приложения консоли. Я сохранил следующие настройки конфигурации в библиотеке классов EF, т.е. только в одном месте.

Это сработало для меня.


<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.2.61023.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />

<add name="EntityModel" connectionString="Server=Localhost\SQLEXPRESS;Database=SampleEntities;Trusted_Connection=True;" providerName="System.Data.EntityClient" />


Ответ 8

Я думаю, проблема в этой строке:

<context type="GdpSoftware.Server.Data.GdpSoftwareDbContext, GdpSoftware.Server.Data" disableDatabaseInitialization="true">

Я не знаю, почему вы используете этот подход и как он работает...

Может быть, лучше попытаться вытащить его из web.config и пойти другим путем.

Ответ 9

Если вы поддерживаете еще один файл cinfiguration для app.config, не включайте никаких ключей на родительскую страницу.

Родительская страница: app.config

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

Страница Child: appSettings.config

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

Ответ 10

Найдите в web.config или App.Config, если у вас есть теги, которые не используются в вашем проекте или у вас нет в ваших ссылках.

Ответ 11

У меня была такая же проблема. Через один день я получил его.

Проблема заключалась в добавлении двух тегов smtp в mailSettings под <system.net>.

Ответ 12

У меня была эта ошибка сегодня на вложенном приложении MVC, запущенном как виртуальная папка в другом приложении MVC. В моем случае InnerException был более информативным, чем основной. В нем говорилось:

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

После исправления повторяющихся строк подключения во вложенных приложениях все работало нормально.

Ответ 13

Если вы используете ASP.NET и IISExpress, перейдите в раздел "C:\Users\\Documents\IISExpress\config\applicationhost.config", найдите свой проект и посмотрите, есть ли у вас ошибка в записи virtualDirectory.

Ответ 14

У меня возникла аналогичная проблема, и изменение defaultConnectionFactory было SqlConnectionFactory помогло мне решить эту проблему.

Ответ 15

фактическая ошибка, вызванная сообщением = непризнанный элемент 'провайдеры' в web.config поэтому из файла web.config удалите раздел поставщиков

Ответ 16

Общая проблема - это всего лишь проблема с конфигурациями Machine/Web/App.

У меня были те же строки соединения в Machine.Config, что и в моем App.Config, поэтому я поставил перед своей первой строкой подключения в своем App.Config

Ответ 17

Эта странная ошибка возникает, когда вы играете с различными версиями версий EntityFramework в пакетах Nuget, как я.

Во-первых, удалите свою библиотеку Entity Framework из пакетов NuGet, а затем очистите app.config. Удалив запись из configSections и элемента структуры сущности.

Затем установите нужную версию. Это должно решить проблему.

Ответ 18

В строке подключения первая строка является базой в web.config

SchedulingContext является базовым параметром файла Entity.

<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"/>

Ответ 19

в моем случае добавление <clear/> сразу после того, как <connectionStrings> работало как шарм

Ответ 20

У меня было двойное определение строки подключения в моей службе WCF. Мне удалось отладить службу и увидеть внутреннее сообщение об ошибке (по умолчанию не отображается):

ConfigurationErrorsException: The entry 'xxxEntities' has 
already been added. (C:\Users\WcfService\web.config line 35). 

который был после преобразования web.config (обратите внимание на двойные значения)

<connectionStrings>
    <add name="xxxEntities" connectionString="metadata=res://*/ ...
    <add name="xxxEntities" connectionString="metadata=res://*/ ...

Следовательно, удаление нежелательной строки соединения решило мою проблему.