2013-06-16 26 views
44

Ich habe versucht, Entity Framework und SQLite mit this tutorial zu lernen. Ich erhalte jedoch einen Fehler.Eine nicht behandelte Ausnahme vom Typ 'System.TypeInitializationException' ist in EntityFramework.dll aufgetreten

Der Fehler ausgelöst wird:

An unhandled exception of type 'System.TypeInitializationException' occurred in EntityFramework.dll

Additional information: The type initializer for 'System.Data.Entity.Internal.AppConfig' threw an exception.

Hier ist die Spur voller Fehler ist:

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 

Hier ist der C# -Code:

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

    class ChinookContext : DbContext 
    { 
    } 
} 

Hier Datei App.config:

Hier
<?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> 

ist Datei 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> 
+0

Wie haben Sie den Fehler Trace bekommen? Ich muss einen für ein ähnliches Problem sehen, aber ich kann es nicht finden. – puser

Antwort

78

Lesen Sie die Meldung:

Only one <configSections> element allowed per config file and if present must be the first child of the root <configuration> element.

Bewegen Sie den configSections Element nach oben - nur oben, wo system.data aktuell ist.

+0

funktioniert jetzt wie ein Zauber. Danke. –

+2

Hallo, kann ich eine Frage stellen, habe ich das gleiche Setup wie in der Frage und nach dem Hinzufügen der Änderung, die Sie beschrieben haben, bekomme ich den folgenden Fehler: Eine nicht behandelte Ausnahme vom Typ 'System.Configuration.ConfigurationErrorsException' in System.Data aufgetreten .dll Zusätzliche Informationen: Der registrierte .Net Framework Data Provider konnte nicht gefunden oder geladen werden. – Azaryan

+0

@Azaryan Ich weiß es nicht; Alles, was ich vorschlagen kann, ist: * Lesen Sie die vollständige Fehlermeldung * (einschließlich aller inneren Ausnahmen) –

4

Überprüfen Sie, welche Version von Entity Framework-Referenz Sie in Ihren Referenzen haben, und stellen Sie sicher, dass sie mit Ihrem configSections-Knoten in der Datei Web.config übereinstimmt. In meinem Fall zeigte es in meinen configSections auf Version 5.0.0.0 und meine Referenz war 6.0.0.0. Habe ich es einfach und es funktionierte ...

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

Gehen Sie einfach auf Web.Config aus Main Ordner, nicht die in Views Ordner:

configSections

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

< .. >

ANPASSEN SIE DIE VERSION VON EntityFramework, die Sie installiert haben d. wie Version .0.0.0"

-3

In statischen Klasse, , wenn Sie Informationen aus XML oder reg bekommen, Klasse alle Eigenschaften zu initialisieren versucht. Daher sollten Sie, wenn die Variable dort sonst ist Config steuern Eigenschaften werden so die Klasse nicht initialisieren.

prüfen xml referance Variable ist, überprüfen reg referance Variable ist es, Stellen Sie sicher handhaben, wenn sie nicht da sind.

+0

Was ist die Relevanz von xml und "reg" (was ist "reg"?)? Was sind Referenzvariablen? Wie gehst du damit um, dass du nicht da bist? – CodeCaster

+0

meist Config liest aus XML-Datei. Wenn das Objekt, nach dem Sie suchen, nicht in der XML-Datei enthalten ist, erhalten Sie von der Klasse einen Fehler. Einige Konfigurationsdateien werden von reg Datei gelesen. Wenn du etwas von reg liest, solltest du das auch überprüfen. Reg bedeutet Registrierung – SonerZ

0

überprüfen Sie, ob richtige Version verwiesen wird, in Ihr Projekt. E. G. Die DLL, über die sie sich beschweren, könnte von einer älteren Version sein und deshalb könnte es eine Versionskonflikt geben.

Verwandte Themen