WindowsアプリのDB周りを調べていて、Entity Framework Coreがかなり便利だなと思ったので、構築手順とマイグレーション方法について記載したいと思います。
環境
- Visual Studio 2019
- .NET Core 3.0
手順
1. WPFアプリのプロジェクトを新規作成し、以下のNuGetパッケージをインストール
- Microsoft.EntityFrameworkCore.Sqlite(SQLite本体)
- Microsoft.EntityFrameworkCore.Proxies(データの遅延読み込みサポート用)
- Microsoft.EntityFrameworkCore.Tools(マイグレーション用)
2. 以下サイトに記載のソース(C#、XAML)を一通り書き切る(ビルドはまだしない)
https://docs.microsoft.com/ja-jp/ef/core/get-started/wpf
以下にサンプルコードもあるのでそちらを使っても大丈夫かと思います。
EntityFramework.Docs/samples/core/WPF at master · dotnet/EntityFramework.Docs
3. MainWindow.xaml.cs
を以下の通り書き換える
MainWindow.xaml.cs
privatevoidWindow_Loaded(objectsender,RoutedEventArgse){_context.Database.Migrate();// load the entities into EF Core_context.Categories.Load();// bind to the sourcecategoryViewSource.Source=_context.Categories.Local.ToObservableCollection();}
4. パッケージマネージャーコンソールで以下のコマンドを実行し、Migrationsフォルダおよびその配下にC#ファイルが自動生成されることを確認する
Add-Migration InitialCreate
Update-Database
5. ビルド&アプリを実行する
products.db
が生成されるはずです。
マイグレーションのやり方
個人的に便利だと思ったのがこのマイグレーションです。
本来であればクエリ文を手書きして適用するみたいな形でいろいろめんどくさかったりするのですが、EF Coreではクエリ文を手書きせずとも簡単なコマンドで簡単に実現できます。
1. Product.cs
に適当なカラムを追加するなどする(なんでも良いです)
Product.cs
namespaceGetStartedWPF{publicclassProduct{publicintProductId{get;set;}publicstringName{get;set;}publicintPrice{get;set;}// 新しく追加したカラムpublicintCategoryId{get;set;}publicvirtualCategoryCategory{get;set;}}}
2. 以下のコマンドを実行し、Migrationsフォルダの配下にC#ファイルがベット自動生成されることを確認する
Add-Migration AddProductPrice
Update-Database
3. ビルド&アプリ実行
products.db
を見ると、1で変更した内容が反映されているはずです。