WPF(C#) .NET6.0 Microsoft SQL Server LocalDB を使ってみよう

[前回の記事](https://qiita.com/noriseto/items/3b7fc9af433152539d4a)で作成した SampleWPF Project で LocalDB を使ってみます。
### LocalDB をプロジェクトに追加
1.「ツール」->「ツールと機能を取得」を実行
![1.ツールと機能.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/a89f92b5-4c55-eafc-5fc1-a217546d98bc.png)
2.Visual Studio Installer が起動するので、「.NET デスクトップ開発」を選択、「SQL Server Express 2019 LocalDB」をチェックして「変更」をクリック
![2.LocalDB_Install.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/3c0a2fff-747d-b6b9-efef-52e4ee70b68e.png)

:::note info
管理者権限が必要です。
:::

![3.VS_Installer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/29c6750e-4849-5d63-ca72-71906272f602.png)
### EntityFramework インストール
[ツール]->[NuGetパッケージマネージャ]->[ソリューションのNuGetパッケージの管理] を実行し、「EntityFramework」をインストール
![4.PackageManager.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/948ce49f-2c80-ddbb-2220-9a406407698c.png)
![5.EntityFramework.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/0bde98b4-c952-e12a-f97b-0c0f8d5b7a5c.png)
### Modelsフォルダ内に DbContext を継承するクラスを作成

:::note info
今までは、項目の追加で「ADO.NET Entity Data Model」追加するとDbContextを継承したひな形のクラスファイルが作成されたのですが、.NET6.0 だとエラーが発生するので、自作することにしました。
:::

- LocalDBのパスを動的に変更できるようにするため、C# ソース内で設定
- DbSet に 前回作成した User クラスを設定
- "= null!;" は null 以外で初期化
```SampleDbContext.cs

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SampleWPF.Models
{
    public class SampleDbContext: DbContext
    {
        static string dbFile = @"C:\SampleWPF\userdb.mdf";
        static string connectString = $@"Data Source=(LocalDb)\MSSQLLocalDB;AttachDbFileName={dbFile};integrated security=True;";
	        public SampleDbContext() : base(new SqlConnection(connectString), true)
        {
        }
        // DbContextで扱うデータクラスを設定
        public virtual DbSet<User> Users { get; set; } = null!;
    }
}
```
### データを追加するコードのみMainWindow()コンストラクタに実装
LocalDB作成テスト用です。
```MainWindow.xaml.cs
using SampleWPF.Models;
using SampleWPF.ViewModels;
using System;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;

namespace SampleWPF{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public MainWindow()
   {
        InitializeComponent();

        // Initialize DB
        using (SampleDbContext context = new SampleDbContext())
        {
            //context.Database.Migrate();
            if (context.Users.Count() == 0)
            {
                context.Users.Add(new User
                {
                    Id = 1,
                    FirstName = "Nolly",
                    LastName = "Seto"
                });
                context.Users.Add(new User
                {
                    Id = 2,
                    FirstName = "Masa",
                    LastName = "Yoshi"
                });
                context.SaveChanges();
                MessageBox.Show("Added users");
            }
            else
            {
                MessageBox.Show("Already added usernames");
            }
        }
    }
}
```

:::note info
本番運用でないので、Migration は割愛します。
スキーマ等変更する場合が、物理的にLocalDBファイルを削除して再作成してください、
:::

実行するとLocalDB とそのログファイルが作成され、データが2件入ります。
![7.CreateLocalDB.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/ff259713-9448-2127-0b02-d4337d98bed2.png)

### サーバーエクスプローラーで DB 確認
1.[ツール]⇒[データベースに接続]を実行
2.データソースの選択で、「Microsoft SQL Server データベースファイル」を選択して「続行」クリック
![8.DataSource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/72aa3007-e58f-a2de-c65b-2d6fb3a91fb4.png)
2.初回は「SQL Server サポートのためのデータソース」を追加する
![9.AddDataSource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/4786b9cd-2278-3369-d3d9-0a0455266b7a.png)
3.Visual Studio Installer でインストール
![10.InstallerDataSource.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/8488ea18-b791-6f88-172b-d05648018770.png)
4.接続の追加で作成したDBを設定
![11.AddConnection.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/315e0577-1a83-dd95-1fea-a3a2ff038aeb.png)
5.[データ接続] -> [userdb.mdf] -> [テーブル] -> [Users] を右クリックし、「テーブルデータの表示」を実行
![12.TableData.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/3228aee2-f12d-a08f-4171-66dfd8481244.png)
データが2件登録されていることが確認できたので、完了とします。
![13.UsersData.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184036/8b06ee7a-788b-17f1-80d2-bf26dbabb655.png)

### 次回予告
次回は、LocalDB のデータを ListView で表示するアプリを作成する予定です。