2013-06-16 27 views
44

Próbowałem dowiedzieć się Entity Framework i SQLite przy użyciu this tutorial. Jednak pojawia się błąd.Nieobsługiwany wyjątek typu "System.TypeInitializationException" wystąpił w EntityFramework.dll

Błąd wrzucony jest:

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.

Oto pełna ślad błędu:

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 

Oto kod C#:

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

    class ChinookContext : DbContext 
    { 
    } 
} 

Oto plik 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> 

Oto plik 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

W jaki sposób otrzymałeś komunikat o błędzie? Muszę zobaczyć jeden podobny problem, który mam, ale nie mogę go znaleźć. – puser

Odpowiedz

78

Przeczytaj komunikat:

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

Przenieś element configSections na górę - tuż nad gdzie system.data jest obecnie.

+0

działa teraz jak urok. dzięki. –

+2

Witam, mogę zadać pytanie, mam taką samą konfigurację jak w pytaniu i po dodaniu zmiany, którą opisałeś, pojawia się następujący błąd: Wystąpił nieobsługiwany wyjątek typu "System.Configuration.ConfigurationErrorsException" w System.Data .dll Informacje dodatkowe: Nie można znaleźć lub załadować zarejestrowanego dostawcy danych .Net Framework. – Azaryan

+0

@Azaryan Nie wiem; Wszystko, co mogę zasugerować, to: * odczytanie pełnego komunikatu o błędzie * (w tym wszelkie wyjątki wewnętrzne). –

4

Sprawdź, jaka wersja odwołania Entity Framework masz w swoich Referencjach i upewnij się, że pasuje do Twojego węzła configSections w pliku Web.config. W moim przypadku wskazywało na wersję 5.0.0.0 w moich configSections, a mój odnośnik to 6.0.0.0. Właśnie zmienił to i to działało ...

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

Wystarczy przejść do Web.Config od Main folderu, a nie jeden w Views folderu:

configSections

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

< .. >

DOSTOSUJ WERSJA EntityFramework, którą masz zainstalować d, np. jak wersja .0.0.0"

-3

W klasie statycznej jeśli otrzymujesz informację z XML lub Vilnius, klasa próbuje zainicjować wszystkie właściwości. Dlatego należy kontrolować, czy zmienna config jest tam inaczej Properties nie zainicjować tak klasę.

Sprawdź zmienna xml Referance jest tam, Sprawdź zmienna reg Referance to jest tam, Upewnij się, że uchwyt, jeśli nie są one tam.

+0

Jakie jest znaczenie xml i "reg" (co to jest "reg"?)? Czym są zmienne odsyłające? Jak sobie z nimi poradzisz? – CodeCaster

+0

głównie config odczytuje z pliku xml. Jeśli rzeczy, których szukasz, nie znajduje się w pliku xml, klasa spowoduje błąd. Niektóre pliki konfiguracyjne odczytują z pliku rejestru. Jeśli czytasz jakieś rzeczy z reg, powinieneś to sprawdzić. Reg oznacza rejestr – SonerZ

0

Sprawdź, wersja prawa odwołuje się twój projekt. sol. dll, na które narzeka, może pochodzić ze starszej wersji i dlatego może występować niedopasowanie wersji.

Powiązane problemy