Entity-Framework automatische Aktualisierung

8

Ich versuche Entity-Framework in mein Projekt zu implementieren! Mein Projekt ist pluginbasiert, so dass ich nicht weiß, welches Objekt ich in der Datenbank speichern muss.

Ich habe es so implementiert:

%Vor%

Aber ich bekomme diese Ausnahme, wenn ich eine Änderung gebe:

  

Das Modell, das den 'DatabaseContext'-Kontext unterstützt, hat sich seit dem   Datenbank wurde erstellt. Erwägen Sie, Code First Migrations zum Aktualisieren zu verwenden   die Datenbank ( Ссылка ).

Dieser Fehler ist vollständig logisch. Die Datenbank ist nicht synchron, aber wie bekomme ich das Update? Ich habe etwas darüber gelesen:

%Vor%

Aber ich weiß nicht wie und wo man es richtig benutzt! Vielen Dank!

EDIT1: Wenn ich versuche: Aktiviere-Migrationen -EnableAutomaticMigrations

Ich habe diesen Fehler:

%Vor%

EDIT2:

%Vor%     
Flo 06.09.2016, 12:01
quelle

3 Antworten

5

Was Sie verlangen, ist machbar, aber mit einigen Einschränkungen.

Lösung:

Entfernen Sie zuerst das

%Vor%

aus dem Konstruktor. Der Konstruktor wird mehrmals aufgerufen, einschließlich der Migrationen.

Erstellen Sie zweitens eine Konfigurationsklasse wie diese

%Vor%

Ändern Sie dann den Konstruktor wie folgt:

%Vor%

und du bist fertig. Die Datenbanktabellen für die Entitätstypen aus den Plugins werden automatisch entsprechend erstellt / aktualisiert.

Im Grunde genommen handelt es sich hier um eine standardmäßige Code First-Methode mit aktivierten automatischen Migrationen, jedoch mit dynamischer Entitätstypregistrierung / -konfiguration innerhalb von OnModelCreating override.

Einschränkungen:

  • Wenn Sie AutomaticMigrationDataLossAllowed = true nicht setzen, erzeugt EF beim Entfernen des vorhandenen Plugins eine Exception, weil es nicht erlaubt ist, die entsprechenden Tabellen zu löschen. Und wenn Sie dies tun, werden die Plugin-Tabellen gelöscht. Wenn das Plugin erneut hinzugefügt wird, beginnt es bei Null.

  • Die Plugin-Entitäten können nur mit Datenanmerkungen konfiguriert werden. Wenn Sie ihnen die volle Kontrolle geben möchten, müssten Sie wahrscheinlich die Plugin-Schnittstelle ändern und anstelle der Entitätstypen eine Methode aufrufen und stattdessen DbModelBuilder übergeben, damit sie ihre Entitätstypen mithilfe der Fluent-API konfigurieren können sich selbst.

Ivan Stoev 15.09.2016, 11:23
quelle
1

Ausführen:

%Vor%

Wenn es fehlschlägt, fügen Sie die Nachrichten als Kommentar ein.

    
Eduardo 14.09.2016 20:15
quelle
0

Ich denke nicht, dass es jemals mit EF6 mit diesem Ansatz arbeiten wird.

EF benötigt, dass die DbSets in der Kontextklasse sind, also müssen Sie Ihre DatabaseContext -Klasse im laufenden Betrieb generieren (basierend auf Plugin-Entities), kompilieren und laden. Danach können Sie über die Migration nachdenken (automatisch oder manuell, mit oder ohne Datenverlust usw.).
Auch die Verwendung Ihres gerade erstellten DatabaseContext sollte einfach sein (Sie sollten in der Lage sein, alles zu tun, was über die standardmäßige DbContext -Schnittstelle auf Ihre Klasse zugreift)

    
bubi 13.09.2016 06:41
quelle