こんにちは!
今日は「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.cs
や Program.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のマイグレーション方法を比較してみました。
最後にざっくりまとめますね。
比較項目 | EF6 | EFCore |
---|---|---|
マイグレーション方法 | Add-Migration + Update-Database (PM Console) | dotnet ef CLI |
OS対応 | Windowsのみ | クロスプラットフォーム |
最新機能 | 追加予定なし | 継続開発中 |
パフォーマンス | やや重い | 高速化されている |
オススメ度 | レガシープロジェクト向け | 新規開発に最適! |
新しいプロジェクトを始めるなら、迷わずEFCoreを選ぶのが無難です。
もちろん、どちらにもメリット・デメリットがありますが、これからの時代にマッチしているのはやっぱりEFCoreだなと、個人的には思います。
というわけで、今日はEFのマイグレーション事情についてご紹介しました!
「そろそろEFCore触ってみようかな」という方の背中を、ちょっとだけでも押せていたら嬉しいです。
ではでは!
コメントを残す