Vor dem Portieren von EF 6 nach EF Core: Überprüfen Sie die Anforderungen Ihrer AnwendungBefore porting from EF6 to EF Core: Validate your Application's Requirements

Vor der Installation des portiervorgang ist es wichtig, um sicherzustellen, dass EF Core die Anforderungen für den Datenzugriff für Ihre Anwendung erfüllt.Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

Fehlende featuresMissing features

Stellen Sie sicher, dass EF Core verfügt über alle Funktionen, die Sie in Ihrer Anwendung verwenden müssen.Make sure that EF Core has all the features you need to use in your application. Finden Sie unter Funktionsvergleich für einen detaillierten Vergleich wie der Features in EF Core im Vergleich zu EF6.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Wenn alle erforderlichen Features fehlen, stellen Sie sicher, dass Sie den Mangel an diese Funktionen vor dem Portieren nach EF Core beheben können.If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

VerhaltensänderungenBehavior changes

Dies ist eine nicht erschöpfende Liste einiger Änderungen im Verhalten zwischen EF6 und EF Core.This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. Es ist wichtig zu beachten Sie dies als den Port der Anwendung, wie sie die Art ändern können, die Ihre Anwendung verhält sich, die jedoch nicht angezeigt wie die Kompilierungsfehler nach dem Austausch zu EF Core.It is important to keep these in mind as your port your application as they may change the way your application behaves, but will not show up as compilation errors after swapping to EF Core.

DbSet.Add/Attach und Graph-VerhaltenDbSet.Add/Attach and graph behavior

In EF6 Aufrufen DbSet.Add() auf eine Entität in einer rekursiven Suche für alle Entitäten, die in die Navigationseigenschaften verwiesen wird.In EF6, calling DbSet.Add() on an entity results in a recursive search for all entities referenced in its navigation properties. Alle Entitäten, die gefunden werden und nicht bereits vom Kontext, nachverfolgt werden, sind auch markiert werden, wenn hinzugefügt.Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach() verhält sich identisch, außer der alle Entitäten markiert sind als nicht geändert.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

EF Core führt eine rekursive Suche nach ähnlichen, jedoch mit einigen etwas anderen Regeln.EF Core performs a similar recursive search, but with some slightly different rules.

  • Die Stammentität ist immer im angeforderten Zustand (für hinzugefügt DbSet.Add und unverändert für DbSet.Attach).The root entity is always in the requested state (added for DbSet.Add and unchanged for DbSet.Attach).

  • Für Entitäten, die während der rekursiven Suche von Navigationseigenschaften gefunden werden:For entities that are found during the recursive search of navigation properties:

    • Wenn der Primärschlüssel der Entität speichern generierter istIf the primary key of the entity is store generated

      • Wenn der Primärschlüssel nicht auf einen Wert festgelegt ist, wird der Status zu hinzugefügten festgelegt.If the primary key is not set to a value, the state is set to added. Wert des Primärschlüssels gilt als "nicht festgelegt", wenn es der CLR-Standardwert für den Eigenschaftentyp zugewiesen ist (z. B. 0 für int, null für stringusw..).The primary key value is considered "not set" if it is assigned the CLR default value for the property type (for example, 0 for int, null for string, etc.).

      • Wenn der primäre Schlüssel auf einen Wert festgelegt ist, wird der Status auf unchanged festgelegt.If the primary key is set to a value, the state is set to unchanged.

    • Wenn der Primärschlüssel nicht generierten Datenbank ist, wird die Entität im den gleichen Zustand wie der Stamm gespeichert.If the primary key is not database generated, the entity is put in the same state as the root.

Code des ersten DatenbankinitialisierungCode First database initialization

EF6 weist eine erhebliche Menge an Magic, die sie für das Auswählen von Verbindung mit der Datenbank, und Initialisieren der Datenbank ausführt. Zu diesen Regeln gehören:EF6 has a significant amount of magic it performs around selecting the database connection and initializing the database. Some of these rules include:

  • Wenn keine Konfiguration ausgeführt wird, wählt EF6 eine Datenbank auf SQL Express oder LocalDb.If no configuration is performed, EF6 will select a database on SQL Express or LocalDb.

  • Wenn eine Verbindungszeichenfolge mit dem gleichen Namen wie der Kontext in den Anwendungen ist App/Web.config -Datei diese Verbindung verwendet werden.If a connection string with the same name as the context is in the applications App/Web.config file, this connection will be used.

  • Wenn die Datenbank nicht vorhanden ist, wird es erstellt.If the database does not exist, it is created.

  • Wenn keine der Tabellen aus dem Modell in der Datenbank vorhanden sind, wird das Schema für das aktuelle Modell der Datenbank hinzugefügt.If none of the tables from the model exist in the database, the schema for the current model is added to the database. Wenn Migrations aktiviert sind, werden sie verwendet, um die Datenbank zu erstellen.If migrations are enabled, then they are used to create the database.

  • Wenn die Datenbank vorhanden ist, und das Schema von EF6 hatten zuvor erstellt haben, ist Klicken Sie dann das Schema für die Kompatibilität mit dem aktuellen Modell aktiviert.If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. Eine Ausnahme wird ausgelöst, wenn das Modell geändert wurde, da das Schema erstellt wurde.An exception is thrown if the model has changed since the schema was created.

EF Core führt nicht zu, dass keines dieser Magic-Befehl.EF Core does not perform any of this magic.

  • Die datenbankverbindung muss explizit im Code konfiguriert werden.The database connection must be explicitly configured in code.

  • Es wird keine Initialisierung ausgeführt.No initialization is performed. Verwenden Sie DbContext.Database.Migrate() zum Anwenden von Migrationen (oder DbContext.Database.EnsureCreated() und EnsureDeleted() zu erstellen und die Datenbank löschen ohne Migrationen zu verwenden).You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

Erste Tabelle BenennungskonventionCode First table naming convention

EF6 wird der Name der Entitätsklasse über eine pluralisierungsdienst den Standardnamen für die Tabelle zu berechnen, dem die Entität zugeordnet ist.EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

EF Core verwendet den Namen der DbSet -Eigenschaft, die die Entität für den abgeleiteten Kontext verfügbar gemacht wird.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Wenn die Entität nicht verfügt eine DbSet -Eigenschaft, und klicken Sie dann auf den Namen der Klasse wird verwendet.If the entity does not have a DbSet property, then the class name is used.