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%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.
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)
Tags und Links c# entity-framework plugins dynamic