私は Entity Framework と SQLite を使用して このチュートリアル を学習しようとしました。しかし、エラーが発生します。
スローされるエラーは次のとおりです。
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>
メッセージを読む:
構成ファイルごとに許可される
<configSections>
要素は1つのみであり、存在する場合はルート<configuration>
要素の最初の子でなければなりません。
ConfigSections要素を最上部(system.dataが現在ある場所のすぐ上)に移動します。
ReferencesにあるEntity Framework参照のバージョンを確認し、Web.config
ファイルのconfigSections
ノードと一致することを確認してください。私の場合、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"/>
コンソールアプリケーションからライブラリプロジェクトを参照したときにこの問題が発生し、ライブラリプロジェクトはコンソールアプリケーションで参照されていないnugetパッケージを使用していました。コンソールアプリケーションで同じパッケージを参照すると、この問題の解決に役立ちました。
内部例外を確認すると役立ちます。
Main
フォルダーではなく、Views
フォルダーからWeb.Config
に移動するだけです。
configSections
セクションname="entityFramework" type="System.Data. .....,Version=" <strong>5</strong>.0.0.0"..
<..>
たとえば、インストールしたEntityFrameworkのバージョンを調整します。バージョン6。0.0.0 "など
プロジェクトで正しいバージョンが参照されていることを確認してください。例えば。文句を言っているdllは古いバージョンのものである可能性があり、そのためバージョンの不一致が存在する可能性があります。