webentwicklung-frage-antwort-db.com.de

Code First kann Migrationen nicht aktivieren

Ich versuche, Migrationen zu aktivieren, aber es wird eine Ausnahme ausgelöst:

Prüfen, ob der Kontext auf eine vorhandene Datenbank abzielt ... System.TypeInitializationException: Der Typinitialisierer für 'System.Data.Entity.Migrations.DbMigrationsConfiguration`1' hat eine Ausnahme ausgelöst. ---> System.TypeInitializationException: Der Typinitialisierer für 'System.Data.Entity.Internal.AppConfig' hat eine Ausnahme ausgelöst. ---> System.Configuration.ConfigurationErrorsException: Konfigurationssystem konnte nicht initialisiert werden ---> System.Configuration.ConfigurationErrorsException: Das Attribut 'name' muss im Tag 'section' angegeben werden.

Ich gehe davon aus, dass die App.config-Datei nicht richtig eingerichtet ist (sie wurde automatisch eingerichtet, als ich das EF-Paket hinzufügte). Alles was ich tat, war die Verbindungszeichenfolge hinzuzufügen:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>

  <section Name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.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>

 <connectionStrings>
   <add Name="MyContext" connectionString="data source=MYSERVER;initial catalog=CodeFirstTest;user id=***;password=***;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
 </connectionStrings>

 <entityFramework>
   <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework">
     <parameters>
       <parameter value="v11.0" />
     </parameters>
   </defaultConnectionFactory>
   <providers>
     <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
   </providers>
 </entityFramework>
</configuration>

Ich verwende SQL Server 2008 R2.

Da ich eine Verbindungszeichenfolge habe, glaube ich nicht, dass ich die defaultconnectionfactory benötige. Hab ich recht? (Hinweis: Auch ohne diesen Abschnitt bekomme ich immer noch die gleiche Ausnahme)

Was fehlt mir noch?

15

Ich hatte das gleiche Problem, wenn sich mein <connectionString />-Eintrag im oberen Teil der Web.config befindet, gleich nach <configuration>. Dann habe ich versucht, es vor </configuration> zu verschieben, und es hat funktioniert.

49
Lester S

Dies hat hauptsächlich mit der Konfigurationsdatei zu tun. Die eigentliche Stack-Ablaufverfolgung, die dabei hilft, ist "System.Configuration.ConfigurationErrorsException" . Es kann viele Gründe geben, aber alle enthalten die Korrektur hauptsächlich in der Konfigurationsdatei, wie bereits erwähnt .. .. Einige Möglichkeiten, die sich kaum unterscheiden diese sind unten angegeben (aber der Stapel sagt uns wirklich)

  1. Ein möglicher Grund dafür kann sein, dass Ihr Projekt, bei dem die Migrationen aktiviert werden, sich vom Startprojekt unterscheiden kann. Stellen Sie also sicher, dass Sie Ihrem Nuget-Befehl -StartUpProject hinzufügen.
  2. Die Version des verwendeten Entity-Frameworks kann bei zwei verschiedenen Projekten unterschiedlich sein. 
7
skillworks

Ich habe das gleiche Problem getroffen. Mein Problem ist, dass die Datei Web.config eine doppelte Verbindungszeichenfolge enthält. wie unten: 

<add name="DB1234" ..../> <add name="DB1234" ..../> So müssen wir zuerst unsere web.config-Datei überprüfen! Viel Glück!

2
nisiumi

In meinem Fall muss bei Verwendung der von DevExpress MVC generierten Vorlage nach <sectionGroup name="devExpress">...<sectionGroup/> in web.config zusätzliche Zeilen hinzugefügt werden

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

Überprüfen Sie die Schreibweise von 'connectionString' und stellen Sie sicher, dass es sich um 'connectionStrings' handelt. Ich habe die 's' zuvor in meinem eigenen Fall weggelassen.

1
engr_mikolo

In meinem Fall hatte ich mehrere Projekte in der Lösung und ein anderes Projekt wurde als StartUp-Projekt festgelegt. Festlegen des Projekts, für das ich Migrationen aktivieren wollte, während das StartUp-Projekt es löste.

1
Owen Pauling

Wie bei @Lester Antwort prüfen Web-Konfig. Es muss so aussehen:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    ...
  </configSections>
  <appSettings>
   ...
  </appSettings>
  ...
<configuration>
0
Ali Karaca

meiner Erfahrung nach ist es zum Beispiel so, dass alle Informationen, die zum Herstellen einer Verbindung mit der Datenbank verwendet werden, aus der Konfigurationsdatei stammen, die sich im Startup-Projekt befindet, und nicht die, die sich im Projekt befindet, in dem ich bin Generieren oder Verwenden der Anweisungen zum Aktivieren von Migrationen oder Update-Datenbanken. Beispiel: Ich habe das Projekt PRINCIPAL und ein anderes Projekt DATA. Ich verwende das DATA-Projekt nur als Standardprojekt, wenn die Pakete im Packager Console Manager ausgeführt werden, die Konfigurationsdatei jedoch wirklich verwendet wird ist der in PRINCIPAL.

0
Abdiel

Füge dies in <configSections> ein

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

In meinem Fall wird diese Zeile ausgelassen, wenn 2 Instanzen von Visual Studio geöffnet sind. Schließen Sie alle Instanzen von Visual Studio, öffnen Sie EF und installieren Sie EF über die Schnittstelle Nuget oder Console neu, um diesen Fehler zu vermeiden

0
Davi Menezes

Überprüfen Sie die webconfig. Beispiel: Ich hatte die App-Einstellungen wie folgt: 

   <configuration> 
    <appSettings>
          <add key="dhx_license" value="value"/>
    </appSetting>
.....

und warf diesen Fehler. Aber dann wurde mir klar, dass AppSetting unten dupliziert wurde, also zog ich das um und der Fehler verschwand. Vielen Dank.

0
ferralucho