「Entity Framework 6(EF6)」と「Entity Framework Core(EFCore)」のマイグレーション方法

こんにちは!
今日は「Entity Framework 6(EF6)」と「Entity Framework Core(EFCore)」のマイグレーション方法について、がっつり解説していきたいと思います。

ついでに、「最新のプロジェクトではEFCoreを使うのが良さそうですよ」という話も交えて書いていきますね。


1. そもそもマイグレーションってなに?

「マイグレーション(Migration)」は、アプリケーションのコードからデータベースの構造(テーブルやカラム)を作ったり更新したりする仕組みのことです。

「モデルクラスを書いたら、DBもそれに合わせて変えてほしい!」
そんな願いを叶えてくれるのがマイグレーションです。


2. EF6のマイグレーション方法

EF6では、Package Manager Console を使うのが一般的です。Visual Studioの「ツール → NuGet パッケージマネージャー → パッケージマネージャーコンソール」から実行できます。

準備:マイグレーションの有効化

Enable-Migrations

これは初回だけでOKです。Migrations フォルダがプロジェクトに追加されます。

マイグレーションの追加

Add-Migration InitialCreate

このコマンドで、モデルとDBの差分がコードとして生成されます。

データベースの更新

Update-Database

これでデータベースがモデル通りに更新されます。

補足:接続文字列について

EF6では、DbContext クラスのコンストラクタに base("name=MyConnection") のように、“name=” を忘れると正しく接続できないという地味な罠があります。

public MyDbContext() : base("name=MyConnection") { }

こうしておかないと、「接続できません」エラーで詰むので要注意です。


3. EFCoreのマイグレーション方法

EFCoreでは、よりクロスプラットフォームに対応したCLIベースのツールが主流です。もちろんVisual StudioのPackage Manager Consoleでもできますが、コマンドラインツール(dotnet ef)の方が汎用性があります。

準備:ツールのインストール

dotnet tool install --global dotnet-ef

マイグレーションの追加

dotnet ef migrations add InitialCreate

プロジェクトに Migrations フォルダができて、マイグレーションファイルが作成されます。

データベースの更新

dotnet ef database update

このコマンドで、DBがモデルに合わせて変化します。

その他便利コマンド

  • マイグレーション一覧を確認
dotnet ef migrations list
  • マイグレーションを削除(直前のもの)
dotnet ef migrations remove

接続文字列の注意

EFCoreは DbContextOptions を使って接続するので、Startup.csProgram.cs でこんな感じに書きます。

services.AddDbContext<MyDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("MyConnection")));

base("name=...") のような書き方とはお別れです。


4. EFCoreの方がオススメな理由

ここまで読んで、「あれ? EFCoreのほうが柔軟じゃない?」と思った方、鋭いです。

理由1:マルチプラットフォーム対応

EFCoreは.NET Core/.NET 5以降で動くので、LinuxでもMacでも使えます。EF6は基本的にWindowsオンリーでした。

理由2:パフォーマンスが良い

クエリの最適化などが進んでおり、EF6より軽快に動作します。

理由3:頻繁なアップデート

EFCoreは今も積極的に開発中です。新機能もバンバン追加されていて、最新版の.NETと合わせて使えます。

理由4:より柔軟な設計が可能

インターフェース中心の設計、NoSQLへの対応(例えばCosmos DB)、DbContextFactoryなどの拡張性が優れています。


5. とはいえEF6が悪いわけではない

ただし、「すでにEF6で構築されたプロジェクト」であれば、わざわざEFCoreに移行する必要はないこともあります。
EFCoreはEF6と互換性がないので、移行にはそれなりのコストがかかります。

「今から新しく作る」ならEFCoreで決まり。
「昔のプロジェクトをちょっと直すだけ」なら、EF6のままでもOK。


6. まとめ:新規プロジェクトにはEFCoreを!

というわけで、EF6とEFCoreのマイグレーション方法を比較してみました。
最後にざっくりまとめますね。

比較項目EF6EFCore
マイグレーション方法Add-Migration + Update-Database(PM Console)dotnet ef CLI
OS対応Windowsのみクロスプラットフォーム
最新機能追加予定なし継続開発中
パフォーマンスやや重い高速化されている
オススメ度レガシープロジェクト向け新規開発に最適!

新しいプロジェクトを始めるなら、迷わずEFCoreを選ぶのが無難です。

もちろん、どちらにもメリット・デメリットがありますが、これからの時代にマッチしているのはやっぱりEFCoreだなと、個人的には思います。

というわけで、今日はEFのマイグレーション事情についてご紹介しました!
「そろそろEFCore触ってみようかな」という方の背中を、ちょっとだけでも押せていたら嬉しいです。

ではでは!

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です