Vor dem Portieren von EF6 auf EF Core: Überprüfen Sie den Anforderungen der AnwendungBefore porting from EF6 to EF Core: Validate your Application's Requirements

Bevor Sie mit der Portierung von beginnen ist es wichtig zu überprüfen, ob EF Core Anforderungen der Daten für Ihre Anwendung entspricht.Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

Fehlende FunktionenMissing features

Stellen Sie sicher, dass EF Core alle Funktionen verfügt, 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 ausführlichen Vergleich wie die Funktionen von EF-Core mit EF6 verglichen.See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. Wenn alle erforderlichen Funktionen fehlen, stellen Sie sicher, dass für das Fehlen dieser Funktionen vor dem Portieren auf EF Core kompensiert werden können.If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

Verändertes ProgrammverhaltenBehavior 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 den Port die Anwendung halten sich ändernder wie können die Anwendung verhält sich aber wird nicht angezeigt werden, als Kompilierungsfehler nach dem Austausch und 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 von DbSet.Add() für eine Entität führt in eine rekursive 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 benutzerentitäten, die gefunden werden, und nicht bereits vom Kontext, nachverfolgt werden auch als hinzugefügt markiert werden.Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach()verhält sich, mit der Ausnahme alle Entitäten gekennzeichnet sind als unverändert.DbSet.Attach() behaves the same, except all entities are marked as unchanged.

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

  • Die Stammentität befindet sich immer im angeforderten Status (für hinzugefügt DbSet.Add und unverändert 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ügte festgelegt.If the primary key is not set to a value, the state is set to added. Der Primärschlüsselwert gilt als "nicht konfiguriert", wenn es der CLR-Standardwert für den Eigenschaftentyp zugewiesen ist (d. h. 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 (i.e. 0 for int, null for string, etc.).

      • Wenn der Primärschlüssel auf einen Wert festgelegt ist, wird der Status auf unverändert festgelegt.If the primary key is set to a value, the state is set to unchanged.

    • Wenn der Primärschlüssel nicht datenbankgeneriert ist, wird die Entität im 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.

Initialisierung der ersten Datenbank CodeCode First database initialization

EF6 verfügt über eine beträchtliche Menge an Magic, die ausgeführt wird, um die Verbindung mit der Datenbank auswählen und zum Initialisieren der Datenbank. Diese 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 Clientanwendungen ist App/Web.config -Datei wird 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 er 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 mit 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 es sich bei Migrationen aktiviert sind, werden sie verwendet, zum Erstellen der Datenbank.If migrations are enabled, then they are used to create the database.

  • Wenn die Datenbank vorhanden ist und EF6 hatte zuvor das Schema erstellt, wird das Schema für die Kompatibilität mit dem aktuellen Modell überprüft.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 hat, seit der Erstellung des Schemas.An exception is thrown if the model has changed since the schema was created.

EF Core führt keine dieser Magic.EF Core does not perform any of this magic.

  • Verbindung mit der Datenbank muss explizit in Code konfiguriert werden.The database connection must be explicitly configured in code.

  • Keine Initialisierung ausgeführt.No initialization is performed. Verwenden Sie DbContext.Database.Migrate() anzuwendende Migrationen (oder DbContext.Database.EnsureCreated() und EnsureDeleted() zu erstellen und die Datenbank löschen ohne Verwendung von Migrationen).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 NamenskonventionCode First table naming convention

EF6, wird der Klassenname für die Entität über ein Pluralisierung-Dienst, um 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 des der DbSet -Eigenschaft, die die Entität für den abgeleiteten Kontext verfügbar gemacht werden.EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. Wenn die Entität keine DbSet -Eigenschaft, und klicken Sie dann auf den Klassennamen verwendet wird.If the entity does not have a DbSet property, then the class name is used.