WinFormのC#でSQLiteのDI化

■はじめに

WinFormのC#でSQLiteリバース エンジニアリングの続き
まとめにも書いたけど、DBContextとEntityが自動生成出来たので・・・
使ってみると冗長なコードが増えるので

ServiceCollection(DI)を使って、ごにょごにょしてみた

■環境情報

OS:Windows11
DB:SQLite3
開発環境:Microsoft Visual Studio Professional 2022 (64 ビット)
.net core
windows form

■NuGetで必要なものをインストール

Microsoft.EntityFrameworkCore.Tools
Microsoft.EntityFrameworkCore.Design
Microsoft.EntityFrameworkCore.Sqlite.Core
SQLitePCLRaw.bundle_e_sqlcipher

■ServiceCollectionでDI化

毎回、上書きされるリバースエンジニアリングで自動生成されたコードには手を付けないで
DBアクセスとロジッククラスを分けれるように作ってみた。
※インターフェースを準備してとかも考えたけど、今回は見送り

確認用に、下記のようなFormアプリを作ってみた。

検索ボタンを押したら、デバックに出力するだけのもの
WinFormのC#でSQLiteリバース エンジニアリングで先にDBコンテキストとEntityを生成している前提

構成は下記の通り

毎回、DBファイルの場所を書くのは面倒なので定数化
(DATA_PATHは無駄だけど、Dataフォルダを作る予定なのでお許しを)

DBコンテキストを継承して作成
リバースして出来たコードは物理パスそのままだし、パスワード設定時にも対応出来るように考慮

データアクセス用のBaseクラス作成

データアクセスクラス作成
(ココにtestテーブルに関するコードを書く)

ServiceCollectionを使ってDI

これで、DBアクセスをクラスに切り出すことが出来る。

■まとめ

とりあえず、やりたい事が出来た。
自動生成されたDBコンテキストを使わず、
自前で書けばデータアクセスクラスにちゃんと意味を持たせることが出来るんだけど
自動生成の意味がエンティティだけになるから悩ましい(DBコンテキスト生成プログラム作れば良いんだけど)
カスタムリバースエンジニアリング コレを使ってテーブル毎にDBコンテキスト作成出来ないかなぁ

自前で書くなら
果て無きC#への探求心』さんが良さげなクラス設計してたので参考までに