EF6 から EF Core へ移植する前に: アプリケーションの要件の検証Before porting from EF6 to EF Core: Validate your Application's Requirements

移植プロセスを開始する前に、EF Core が、アプリケーションのデータ アクセス要件を満たしていることを検証する必要があります。Before you start the porting process it is important to validate that EF Core meets the data access requirements for your application.

不足している機能Missing features

EF Core が、アプリケーションで使用する必要がありますすべての機能を持つことを確認します。Make sure that EF Core has all the features you need to use in your application. 参照してください機能の比較EF Core での機能を EF6 を比較する方法の詳細な比較。See Feature Comparison for a detailed comparison of how the feature set in EF Core compares to EF6. 任意の必要な機能が存在しない場合は、EF Core に移植する前にこれらの機能の欠落を補うことができますを確認します。If any required features are missing, ensure that you can compensate for the lack of these features before porting to EF Core.

動作の変更Behavior changes

これは、EF6 と EF Core 間における動作のいくつかの変更の一部の一覧です。This is a non-exhaustive list of some changes in behavior between EF6 and EF Core. 留意してポートとして、アプリケーション、アプリケーションの動作は表示されませんコンパイル エラーとしてスワップすると、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 とグラフの動作DbSet.Add/Attach and graph behavior

EF6 では、呼び出すDbSet.Add()ナビゲーション プロパティで参照されているすべてのエンティティの再帰的な検索でエンティティの結果にします。In EF6, calling DbSet.Add() on an entity results in a recursive search for all entities referenced in its navigation properties. 検出され、コンテキストによって既に追跡されていない任意のエンティティも追加としてマークされます。Any entities that are found, and are not already tracked by the context, are also be marked as added. DbSet.Attach() すべてのエンティティがマークされている点を除いて同じですが、動作に変更されません。DbSet.Attach() behaves the same, except all entities are marked as unchanged.

EF Core と同様の再帰検索を実行しますが、いくつかの若干異なる規則。EF Core performs a similar recursive search, but with some slightly different rules.

  • ルート エンティティが要求された状態では常に (追加DbSet.Addの変更とDbSet.Attach)。The root entity is always in the requested state (added for DbSet.Add and unchanged for DbSet.Attach).

  • エンティティのナビゲーション プロパティの再帰検索中に存在します。For entities that are found during the recursive search of navigation properties:

    • エンティティの主キーが生成されるストアの場合If the primary key of the entity is store generated

      • 主キーが値に設定されていない場合は、状態に追加された設定されます。If the primary key is not set to a value, the state is set to added. 主キーの値と見なされます「設定なし」プロパティの型の CLR の既定値が割り当てられている場合 (たとえば、0intnullstringなど。)。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.).

      • 主キーが値に設定されている場合、状態が unchanged に設定します。If the primary key is set to a value, the state is set to unchanged.

    • 主キーがデータベースで生成されたでない場合は、エンティティは、ルートと同じ状態に置かれます。If the primary key is not database generated, the entity is put in the same state as the root.

コードの最初のデータベースの初期化Code First database initialization

EF6 が、大量のマジックのデータベース接続の選択やデータベースの初期化を実行します。これらのルールのとおりです。EF6 has a significant amount of magic it performs around selecting the database connection and initializing the database. Some of these rules include:

  • 構成がない場合、EF6 は SQL Express または LocalDb にデータベースを選択します。If no configuration is performed, EF6 will select a database on SQL Express or LocalDb.

  • コンテキストと同じ名前で接続文字列が、アプリケーションの場合App/Web.configファイルでは、この接続が使用されます。If a connection string with the same name as the context is in the applications App/Web.config file, this connection will be used.

  • データベースが存在しない場合は作成されます。If the database does not exist, it is created.

  • テーブル モデルからは、データベースに存在する場合は、現在のモデルのスキーマがデータベースに追加されます。If none of the tables from the model exist in the database, the schema for the current model is added to the database. Migrations を有効にする場合は、データベースの作成が使用されます。If migrations are enabled, then they are used to create the database.

  • 場合は、データベースが存在し、EF6 以前に作成した、スキーマ、スキーマを現在のモデルとの互換性をチェックします。If the database exists and EF6 had previously created the schema, then the schema is checked for compatibility with the current model. スキーマが作成されたため、モデルが変更された場合、例外がスローされます。An exception is thrown if the model has changed since the schema was created.

このマジックのいずれかの EF Core は実行されません。EF Core does not perform any of this magic.

  • コードでは、データベース接続を明示的に構成する必要があります。The database connection must be explicitly configured in code.

  • 初期化は実行されません。No initialization is performed. 使用する必要がありますDbContext.Database.Migrate()移行を適用する (またはDbContext.Database.EnsureCreated()EnsureDeleted()migrations を使用せず、データベースの作成/削除する)。You must use DbContext.Database.Migrate() to apply migrations (or DbContext.Database.EnsureCreated() and EnsureDeleted() to create/delete the database without using migrations).

名前付け規則、コードの最初のテーブルCode First table naming convention

EF6 では、エンティティにマップされる既定のテーブル名を計算する複数形化サービスを介してエンティティ クラス名が実行されます。EF6 runs the entity class name through a pluralization service to calculate the default table name that the entity is mapped to.

EF Core の名前を使用して、DbSetエンティティが、派生コンテキストで公開されているプロパティ。EF Core uses the name of the DbSet property that the entity is exposed in on the derived context. エンティティがない場合、DbSetし、プロパティ、クラス名を使用します。If the entity does not have a DbSet property, then the class name is used.