EF Core への EF6 コードベース モデルの移植

すべての注意事項を読み、移植の準備ができたら、次のガイドラインを参考にして作業を開始してください。

EF Core の NuGet パッケージをインストールする

EF Core を使用するには、使用するデータベース プロバイダーに対して NuGet パッケージをインストールします。 たとえば、SQL Server を対象とする場合は、Microsoft.EntityFrameworkCore.SqlServer をインストールします。 詳細については、「データベース プロバイダー」を参照してください。

移行の使用を計画している場合は、Microsoft.EntityFrameworkCore.Tools パッケージもインストールする必要があります。

EF6 NuGet パッケージ (EntityFramework) はインストールされたままにしておくことをお勧めします。これは EF Core と EF6 を同じアプリケーションで並列で使用できるようにするためです。 ただし、アプリケーションのどの領域でも EF6 を使用するつもりがない場合は、パッケージをアンインストールすることで、注意が必要なコード上にコンパイル エラーを表示することができます。

名前空間をスワップする

EF6 で使用する API のほとんどは、System.Data.Entity 名前空間 (および関連するサブ名前空間) にあります。 最初のコード変更では、Microsoft.EntityFrameworkCore 名前空間にスワップします。 通常は、派生コンテキスト コード ファイルから開始し、そこで作業を行い、コンパイル エラーが発生したら対処します。

コンテキストの構成 (接続など)

データベース接続の構成」で説明しているように、EF Core には、接続先のデータベースを検出する特別な方法はあまりありません。 派生コンテキストで OnConfiguring メソッドをオーバーライドし、API 固有のデータベース プロバイダーを使用してデータベースへの接続を設定する必要があります。

ほとんどの EF6 アプリケーションでは、接続文字列がアプリケーションの App/Web.config ファイルに格納されます。 EF Core では、ConfigurationManager API を使用してこの接続文字列を読み取ります。 この API を使用できるようにするには、System.Configuration フレームワーク アセンブリに参照を追加しなければならない場合があります。

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
      optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["BloggingDatabase"].ConnectionString);
    }
}

コードを更新する

この時点では、コンパイル エラーに対処し、コードを見直して、動作変更の影響があるかどうかを確認します。

既存の移行

既存の EF6 移行を EF Core に移植する方法は実際にはありません。

可能であれば、EF6 からの以前の移行がすべてデータベースに適用されていることを前提に、EF Core を使用してその時点からスキーマの移行を開始することをお勧めします。 これを行うには、モデルが EF Core に移植された後に Add-Migration コマンドを使用して移行を追加します。 次に、スキャフォールディング移行の UpDown のメソッドからすべてのコードを削除します。 その後の移行では、最初の移行がスキャフォールディングされたときにモデルと比較されます。

移植をテストする

アプリケーションでコンパイルされるからといって、EF Core に正常に移植されるわけではありません。 アプリケーションのすべての領域をテストして、どの動作変更もアプリケーションに悪影響を与えないことを確認する必要があります。

最後に、コード内の特定のケースやシナリオについてより多くのアドバイスを得るために 移植する際に考慮する必要のある詳細なケースを確認します。