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);
}
}
警告: パスワードやその他の機密データをソース コードまたは構成ファイルに保存しないでください。 運用環境のシークレットは、開発またはテストには使用しないでください。 アプリと一緒にシークレットを展開しないでください。 運用シークレットには、Azure Key Vault などの制御された手段を使用してアクセスする必要があります。 Azure のテストシークレットと運用シークレットは、 Azure Key Vault 構成プロバイダーで格納および保護できます。
コードを更新する
この時点では、コンパイル エラーに対処し、コードを見直して、動作変更の影響があるかどうかを確認します。
既存の移行
既存の EF6 移行を EF Core に移植する方法は実際にはありません。
可能であれば、EF6 からの以前の移行がすべてデータベースに適用されていることを前提に、EF Core を使用してその時点からスキーマの移行を開始することをお勧めします。 これを行うには、モデルが EF Core に移植された後に Add-Migration
コマンドを使用して移行を追加します。 次に、スキャフォールディング移行の Up
と Down
のメソッドからすべてのコードを削除します。 その後の移行では、最初の移行がスキャフォールディングされたときにモデルと比較されます。
移植をテストする
アプリケーションでコンパイルされるからといって、EF Core に正常に移植されるわけではありません。 アプリケーションのすべての領域をテストして、どの動作変更もアプリケーションに悪影響を与えないことを確認する必要があります。
最後に、コード内の特定のケースやシナリオについてより多くのアドバイスを得るために 移植する際に考慮する必要のある詳細なケースを確認します。
.NET