46

我试图使用本教程学习Entity FrameworkSQLite。但是,我得到一个错误。

抛出的错误是:

EntityFramework.dll 中出现“System.TypeInitializationException”类型的未处理异常

附加信息:“System.Data.Entity.Internal.AppConfig”的类型初始化程序引发了异常。

这是完整的错误跟踪:

System.TypeInitializationException: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception. ---> System.Configuration.Configuration
ErrorsException: Configuration system failed to initialize ---> System.Configuration.ConfigurationErrorsException: Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration>
element. (C:\Users\Ankur\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\bin\Debug\ConsoleApplication1.vshost.exe.config line 11)
   at System.Configuration.ConfigurationSchemaErrors.ThrowIfErrors(Boolean ignoreLocal)
   at System.Configuration.BaseConfigurationRecord.ThrowIfParseErrors(ConfigurationSchemaErrors schemaErrors)
   at System.Configuration.BaseConfigurationRecord.ThrowIfInitErrors()
   at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
   --- End of inner exception stack trace ---
   at System.Configuration.ClientConfigurationSystem.EnsureInit(String configKey)
   at System.Configuration.ClientConfigurationSystem.PrepareClientConfigSystem(String sectionName)
   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.Internal.AppConfig.get_DefaultInstance()
   at System.Data.Entity.Internal.LazyInternalConnection..ctor(String nameOrConnectionString)
   at System.Data.Entity.DbContext..ctor()
   at ConsoleApplication1.ChinookContext..ctor()
   at ConsoleApplication1.Program.Main(String[] args) in c:\Users\Ankur\Documents\Visual Studio 2012\Projects\ConsoleApplication1\ConsoleApplication1\Program.cs
:line 16

这是 C# 代码:

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            using (var context = new ChinookContext()) //error comes on this line
            {
            }
        }
    }

    class ChinookContext : DbContext
    {
    }
}

这是文件App.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.data>
    <DbProviderFactories>
      <add name="SQLite Data Provider" invariant="System.Data.SQLite" description="Data Provider for SQLite" type="System.Data.SQLite.SQLiteFactory, System.Data.SQLite" />
    </DbProviderFactories>
  </system.data>
  <connectionStrings>
    <add name="ChinookContext" connectionString="Data Source=|DataDirectory|Chinook_Sqlite_AutoIncrementPKs.sqlite" providerName="System.Data.SQLite" />
  </connectionStrings>
  <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>
  <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>
</configuration>

这是文件packages.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="EntityFramework" version="5.0.0" targetFramework="net45" />
  <package id="System.Data.SQLite.x86" version="1.0.86.0" targetFramework="net45" />
</packages>
4

6 回答 6

81

阅读留言:

每个配置文件只允许一个<configSections>元素,如果存在,则必须是根元素的第一个子 <configuration>元素。

将 configSections 元素移到顶部 - 就在 system.data 当前所在位置的上方。

于 2013-06-16T11:19:05.963 回答
4

检查您在参考中拥有哪个版本的实体框架参考,并确保它与文件中的configSections节点匹配Web.config。就我而言,它在我的 configSections 中指向版本 5.0.0.0,而我的参考是 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"/>
于 2015-05-07T16:35:05.910 回答
0

检查您的项目中是否引用了正确的版本。例如,它抱怨的 dll 可能来自旧版本,这就是版本不匹配的原因。

于 2017-08-01T15:26:58.327 回答
0

Web.Config只需从Main文件夹转到,而不是文件夹中的那个Views

配置节

部分name="entityFramework" type="System.Data. .....,Version=" <strong>5</strong>.0.0.0"..

<..>

调整您已安装的 EntityFramework 的版本,例如。像版本6 .0.0.0"

于 2016-12-26T16:22:57.080 回答
0

当我从控制台应用程序中引用库项目时遇到了这个问题,并且库项目正在使用控制台应用程序中未引用的 nuget 包。在控制台应用程序中引用相同的包有助于解决此问题。

查看内部异常会有所帮助。

于 2018-12-21T09:40:56.910 回答
-3

在静态类中,如果您从 xml 或 reg 获取信息,类会尝试初始化所有属性。因此,您应该控制配置变量是否存在,否则属性将不会初始化,因此类。

检查 xml 引用变量是否存在,检查 reg 引用变量是否存在,如果它们不存在,请确保处理。

于 2017-07-23T12:33:42.317 回答