Инициализатор типа для "System.Data.Entity.Internal.AppConfig" выбрал исключение на субсайте
У меня есть 2 веб-сайта, один - подкаталог другого, но это приложение
ex:/root и /root/Services
Они оба используют Entity Framework 6.x, но дочерний веб-сайт бросает Инициализатор типа для System.Data.Entity.Internal.AppConfig 'выбрал исключение, потому что он, кажется, видит много записей для того же поставщика базы данных EF из-за вложенного web.config
Есть ли способ очистить коллекцию поставщиков, чтобы я не получил эту ошибку? Я попытался вставить, который не имел никакого эффекта.
Если я прокомментирую раздел поставщиков, он работает
<providers>
<provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
</providers>
</entityFramework>
Но я не хочу этого делать, потому что не каждая среда будет иметь вложенные веб-сайты. и NuGet стремится вернуть его обратно.
Могу ли я настроить это программно?
Здесь полная трассировка исключений и стека
System.TypeInitializationException was unhandled by user code
HResult=-2146233036
Message=**The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception.**
Source=EntityFramework
TypeName=System.Data.Entity.Internal.AppConfig
StackTrace:
at System.Data.Entity.Internal.AppConfig.get_DefaultInstance()
at System.Data.Entity.Internal.LazyInternalConnection..ctor(String nameOrConnectionString)
at System.Data.Entity.DbContext..ctor(String nameOrConnectionString)
at co.Repository.Data.coContext..ctor() in coModel.Context.Generated.cs:line 23
at co.Repository.RepositoryBase`1.SingleOrDefault(Expression`1 predicate) in co.Repository\RepositoryBase.cs:line 13
at UserFactory.GetOneByUserName(String siteCode, String userName) in UserFactory.cs:line 151
at UserService.GetOneByUserName(String siteCode, String userName) in UserService.cs:line 59
at SyncInvokeGetOneByUserName(Object , Object[] , Object[] )
at System.ServiceModel.Dispatcher.SyncMethodInvoker.Invoke(Object instance, Object[] inputs, Object[]& outputs)
at System.ServiceModel.Dispatcher.DispatchOperationRuntime.InvokeBegin(MessageRpc& rpc)
InnerException: System.Configuration.ConfigurationErrorsException
HResult=-2146232062
Message=An error occurred creating the configuration section handler for entityFramework: **The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration. The invariant name must be unique for each configured provider.** (web.config line 339)
Source=System.Configuration
BareMessage=An error occurred creating the configuration section handler for entityFramework: The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration. The invariant name must be unique for each configured provider.
Filename=web.config
Line=339
StackTrace:
at System.Configuration.BaseConfigurationRecord.EvaluateOne(String[] keys, SectionInput input, Boolean isTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult)
at System.Configuration.BaseConfigurationRecord.Evaluate(FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentResult, Boolean getLkg, Boolean getRuntimeObject, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, Object& result, Object& resultRuntimeObject)
at System.Configuration.BaseConfigurationRecord.GetSection(String configKey)
at System.Configuration.ConfigurationManager.GetSection(String sectionName)
at System.Data.Entity.Internal.AppConfig..ctor()
at System.Data.Entity.Internal.AppConfig..cctor()
InnerException: System.InvalidOperationException
HResult=-2146233079
Message=The provider for invariant name 'System.Data.SqlClient' is specified multiple times in the application configuration. The invariant name must be unique for each configured provider.
Source=EntityFramework
StackTrace:
at System.Data.Entity.Internal.ConfigFile.ProviderCollection.BaseAdd(ConfigurationElement element)
at System.Configuration.ConfigurationElementCollection.OnDeserializeUnrecognizedElement(String elementName, XmlReader reader)
at System.Configuration.ConfigurationElement.DeserializeElement(XmlReader reader, Boolean serializeCollectionKey)
at System.Configuration.ConfigurationElement.DeserializeElement(XmlReader reader, Boolean serializeCollectionKey)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionImpl(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.CreateSectionWithRestrictedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.RuntimeConfigurationRecord.CreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader)
at System.Configuration.BaseConfigurationRecord.CallCreateSection(Boolean inputIsTrusted, FactoryRecord factoryRecord, SectionRecord sectionRecord, Object parentConfig, ConfigXmlReader reader, String filename, Int32 line)
InnerException:
Ответы
Ответ 1
В EF6 вы можете использовать конфигурацию Code Base - посмотрите на эту статью для более подробной информации.
ИЗМЕНИТЬ
Я проверил в change код EF6, где точные дубликаты игнорируются. Это должно решить вашу проблему. Обратите внимание, что это не соответствовало выпуску 6.0.2 и должно быть включено в следующую версию после 6.0.2.
Ответ 2
У меня была такая же проблема.
Я решил эту ошибку, просто обновив номер версии:
Version = 5.0.0.0
в
Version = 6.0.0.0
Пример:
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" requirePermission="false" />
Ответ 3
У меня возникла проблема с EF 4.3.1 с вложенным сайтом.
Оба сайта использовали одну и ту же библиотеку и строки подключения... ошибка была вызвана очевидными дубликатами в
<connectionStrings>
Предположительно загрузили строки подключения из родительского сайта, а затем не смогли загрузить строки подсайта.
В своем субсайте добавьте:
<connectionStrings>
<clear/>
...your normal connection strings
</connectionStrings>