Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Dies ist eine nicht erschöpfende Liste der Verhaltensänderungen zwischen EF6 und EF Core. Es ist wichtig, diese im Auge zu behalten, während Sie Ihre Anwendung portieren, da sie die Funktionsweise Ihrer Anwendung verändern können. Nach dem Umstieg auf EF Core werden sie jedoch nicht als Kompilierungsfehler angezeigt.
Dies ist eine allgemeine Überprüfung, die im Rahmen des Portierungsprozesses berücksichtigt werden soll. Ausführlichere, Fall-für-Fall-Anweisungen finden Sie in den detaillierten Fällen.
DbSet.Add/Attach- und Graph-Verhalten
In EF6 führt das Aufrufen DbSet.Add() einer Entität zu einer rekursiven Suche nach allen Entitäten, auf die in den Navigationseigenschaften verwiesen wird. Alle Entitäten, die gefunden werden und nicht bereits vom Kontext nachverfolgt werden, werden ebenfalls als hinzugefügt gekennzeichnet.
DbSet.Attach() verhält sich gleich, außer dass alle Entitäten unverändert markiert sind.
EF Core führt eine ähnliche rekursive Suche aus, aber mit einigen geringfügig unterschiedlichen Regeln.
- Wenn die Stammentität für einen generierten Schlüssel konfiguriert ist und der Schlüssel nicht festgelegt ist, wird sie in den
AddedZustand versetzt. -
Für Entitäten, die während der rekursiven Suche von Navigationseigenschaften gefunden werden:
-
Wenn der Primärschlüssel der Entität generiert wird
- Wenn der Primärschlüssel nicht auf einen Wert festgelegt ist, wird der Zustand so festgelegt, dass er hinzugefügt wird. Der Primärschlüsselwert wird als "nicht festgelegt" betrachtet, wenn ihm der CLR-Standardwert für den Eigenschaftstyp zugewiesen wird (z
0. B. fürint,nullfürstring, usw.). - Wenn der Primärschlüssel auf einen Wert festgelegt ist, wird der Zustand unverändert festgelegt.
- Wenn der Primärschlüssel nicht auf einen Wert festgelegt ist, wird der Zustand so festgelegt, dass er hinzugefügt wird. Der Primärschlüsselwert wird als "nicht festgelegt" betrachtet, wenn ihm der CLR-Standardwert für den Eigenschaftstyp zugewiesen wird (z
- Wenn der Primärschlüssel nicht datenbankgeneriert wird, wird die Entität in denselben Zustand versetzt wie der Stamm.
-
Wenn der Primärschlüssel der Entität generiert wird
- Diese Verhaltensänderung gilt nur für die
AttachGruppen undUpdateMethoden.Addlegt Entitäten immer in denAddedZustand, auch wenn der Schlüssel festgelegt ist. -
AttachMethoden setzen Entitäten mit Schlüsseln in denUnchangedZustand. Dies erleichtert das "Einfügen, wenn neu, andernfalls bleibt es allein.".UpdateMethoden stellen Entitäten mit Schlüsseln in denModifiedZustand fest. Dies erleichtert "Einfügen, wenn neu, andernfalls aktualisieren".
Die Grundphilosophie hier ist, dass Update eine sehr einfache Möglichkeit ist zur Verarbeitung von Einfügen und Aktualisieren von nicht verbundenen Entitäten. Dadurch wird sichergestellt, dass alle neuen Entitäten eingefügt werden, und alle vorhandenen Entitäten werden aktualisiert.
Gleichzeitig bietet es weiterhin eine einfache Möglichkeit, Add Entitäten einzufügen. Das Hinzufügen ist meist nur hilfreich, wenn keine vom Speicher generierten Schlüssel verwendet werden, sodass EF nicht weiß, ob die Entität neu ist oder nicht.
Weitere Informationen zu diesen Verhaltensweisen in EF Core finden Sie unter Change Tracking in EF Core.
Code First-Datenbankinitialisierung
EF6 führt eine beträchtliche Menge an 'Magie' durch, um die Datenbankverbindung auszuwählen und die Datenbank zu initialisieren. Einige dieser Regeln umfassen:
- Wenn keine Konfiguration ausgeführt wird, wählt EF6 eine Datenbank in SQL Express oder LocalDb aus.
- Wenn sich eine Verbindungszeichenfolge mit demselben Namen wie der Kontext in der Datei der Anwendung
App/Web.configbefindet, wird diese Verbindung verwendet. - Wenn die Datenbank nicht vorhanden ist, wird sie erstellt.
- Wenn keine der Tabellen aus dem Modell in der Datenbank vorhanden ist, wird das Schema für das aktuelle Modell der Datenbank hinzugefügt. Wenn Migrationen aktiviert sind, werden sie zum Erstellen der Datenbank verwendet.
- Wenn die Datenbank vorhanden ist und EF6 zuvor das Schema erstellt hatte, wird das Schema auf Kompatibilität mit dem aktuellen Modell überprüft. Eine Ausnahme wird ausgelöst, wenn sich das Modell seit der Erstellung des Schemas geändert hat.
EF Core führt keinen dieser Magie durch.
- Die Datenbankverbindung muss im Code explizit konfiguriert werden.
- Es wird keine Initialisierung ausgeführt. Sie müssen
DbContext.Database.Migrate()verwenden, um Migrationen anzuwenden (oderDbContext.Database.EnsureCreated()undEnsureDeleted(), um die Datenbank zu erstellen oder zu löschen, ohne Migrationen zu verwenden).
Benennungskonvention für Code First-Tabellen
EF6 führt den Namen der Entitätsklasse über einen Pluralisierungsdienst aus, um den Standardtabellennamen zu berechnen, dem die Entität zugeordnet ist.
EF Core verwendet den Namen der Eigenschaft DbSet, unter dem die Entität im abgeleiteten Kontext verfügbar gemacht wird. Wenn die Entität nicht über eine DbSet Eigenschaft verfügt, wird der Klassenname verwendet.
Weitere Informationen finden Sie unter Verwalten von Datenbankschemas.