【问题标题】:While I'm trying to add new migration, I get this exception当我尝试添加新的迁移时,我得到了这个异常
【发布时间】:2020-05-13 12:47:35
【问题描述】:

当我尝试添加新的迁移时,我得到了这个异常。

“System.Data.Entity.Migrations.DbMigrationsConfiguration`1”的类型初始化程序引发异常。

这是 App.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, Z.EntityFramework.Classic, Version=7.0.0.0, Culture=neutral, PublicKeyToken=afs71658f100c290" requirePermission="false" />
  </configSections>
<connectionStrings configSource="bin\ConnectionStrings.config" /> 
<entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
      <parameters>
        <parameter value="mssqllocaldb" />
      </parameters>
    </defaultConnectionFactory>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, Z.EntityFramework.Classic.SqlServer" />
    </providers>
  </entityFramework>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6" />
  </startup>
</configuration>

这是 ConnectionStrings.config:

<connectionStrings>
  <add name="Finance" connectionString="data source=192.168.0.6;initial catalog=Finance_Test;user id=sa;password=$Finance@92" providerName="System.Data.SqlClient" />
</connectionStrings>

这是堆栈跟踪:

System.TypeInitializationException: The type initializer for 'System.Data.Entity.Migrations.DbMigrationsConfiguration`1' threw an exception. ---> System.TypeInitializationException: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception. ---> System.Configuration.ConfigurationErrorsException: Unable to open configSource file 'bin\ConnectionStrings.config'. (C:\MyProjects\Finance\Shoniz.Finance.Persistence\tmp2747.tmp line 8)
   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.GetSectionRecursive(String configKey, Boolean getLkg, Boolean checkPermission, Boolean getRuntimeObject, Boolean requestIsHere, 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.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection(String sectionName)
   at System.Configuration.ConfigurationManager.get_ConnectionStrings()
   at System.Data.Entity.Internal.AppConfig..ctor()
   at System.Data.Entity.Internal.AppConfig..cctor()
   --- End of inner exception stack trace ---
   at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.EnsureLoadedForAssembly(Assembly assemblyHint, Type contextTypeHint)
   at System.Data.Entity.Infrastructure.DependencyResolution.DbConfigurationManager.EnsureLoadedForContext(Type contextType)
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1..cctor()
   --- End of inner exception stack trace ---
   at System.Data.Entity.Migrations.DbMigrationsConfiguration`1..ctor()
   at Shoniz.Finance.Persistence.Migrations.Configuration..ctor() in C:\MyProjects\Finance\Shoniz.Finance.Persistence\Migrations\Configuration.cs:line 10
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Data.Entity.Migrations.Utilities.MigrationsConfigurationFinder.FindMigrationsConfiguration(Type contextType, String configurationTypeName, Func`2 noType, Func`3 multipleTypes, Func`3 noTypeWithName, Func`3 multipleTypesWithName)
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.FindConfiguration()
   at System.Data.Entity.Migrations.Design.ToolingFacade.ScaffoldRunner.RunCore()
   at System.Data.Entity.Migrations.Design.ToolingFacade.BaseRunner.Run()

那么,您如何看待这个异常?我该如何解决这个问题?

【问题讨论】:

  • 您是否看到 System.Configuration.ConfigurationErrorsException: Unable to open configSource file 'bin\ConnectionStrings.config'。 - 您似乎在引用此配置文件,但它是不在那里.....
  • @marc_s 抱歉,我编辑了问题
  • 请检查ConnectionStrings.config文件的路径
  • @Raghuveer 我在这个异常之前添加了很多迁移,所以路径没有问题

标签: c# entity-framework-6 database-migration app-config


【解决方案1】:

在实体框架中,type initializer error 很可能是由于 Web.config 文件格式不正确,例如连接字符串有两个或更多部分,或者连接字符串本身存在问题,例如无效的提供程序。 而不是App.Config中的以下部分

<connectionStrings configSource="bin\ConnectionStrings.config" /> 

尝试直接在您的App.Config 中找到以下代码。

<connectionStrings>
<add name="Finance" connectionString="data source=192.168.0.6;initial catalog=Finance_Test;user id=sa;password=$Finance@92"providerName="System.Data.SqlClient"/>
</connectionStrings>

祝你好运。

【讨论】:

  • 我不能在这个App.Config 文件中直接使用connectionStrings,因为我已经在整个解决方案的多个App.config 文件中使用了它。 (ConnectionStrings.config 文件是单一事实来源
  • 您能否检查您的bin 文件夹并确保ConnectionStrings.config 是否存在?!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 2022-06-23
相关资源
最近更新 更多