🐙

DB仕様書ファーストなWindowsフォームアプリ(C#)のテンプレート

に公開

はじめに

DBを利用したWindowsフォームアプリを作ることがよくありますが、DB接続やモデルクラス作成の基盤部分を作るのにけっこう時間がかかります。

最近では、コードファースト(orデータベースファースト)の機能を使ってコードとデータベースを連動することはできるのですが、実際の業務では、ExcelでDB仕様書を設計し、それをベースにすることが多いので、DB仕様書ファースト的な感じで進められると便利です。

いつも、置換などを駆使してDB仕様書からモデルクラスやCreateTable文などを作成しているのですが、毎回同じようなことに時間をかけたくないので、よく使う構成をテンプレート化しておくことにしました。

そのまま使えるわけではないですが、これをベースにすれば構築の手間が省けるかと思います。

方針

今回は、以下の流れで進めます。

1.ExcelのDB仕様書からCreateTable文を自動生成
2.CreateTable文を実行し、データベースに反映
3.データベース情報からモデルクラスを自動生成

1については、VBAを使用することにしました。
今どきVBA・・・? とは思いましたが、Excelを使える環境であればVBAも使用できると思いますし、わざわざ他のツールなどを用意するのも面倒でしたので、一番手っ取り早い方法を選びました。
当面は問題ないと思いますが、VBAのサポート状況によっては、再検討することになる可能性はあります。。。

3については、EF Core ツール の機能を使います。

ソース

作成したテンプレート環境のソースを以下にアップロードしています。

WinForm-DB-Template

環境

VisualStudio2022
.Net8.0
PostgreSQL 16.2

使用方法

データベース(PostgreSQL)の構築は割愛します。
適当に構築してください。

1.ExcelのDB仕様書からCreateTable文を自動生成

DBフォルダにある10_ファイル情報出力マクロ.xlsmを開き、実行シートの実行ボタンをクリックします。
必要に応じて、データベース接続設定を修正してください。

ファイル選択ダイアログが表示されますので、同フォルダにあるファイル仕様書サンプル.xlsxを選択します。

ファイル仕様書サンプル.xlsxの定義に従って、CreateTableフォルダにCreateTable文が記載されたsqlファイルが生成されます。

また、DBフォルダ直下に、モデル生成のためのコマンドファイル20_CreateModels.batが生成されます。

2.CreateTable文を実行し、データベースに反映

1で生成されたCreateTableフォルダに、sqlファイルをまとめて実行するためのバッチ_CreatTable.batも生成されていますので、これを実行します。
CreateTable文が実行され、テーブルが生成されます。

3.データベース情報からモデルクラスを自動生成

1で生成された20_CreateModels.batを実行すると、データベース情報からモデルクラスが自動生成され、Modelsフォルダに保存されます。
EF Core ツールのインストールが必要です。

>dotnet tool install --global dotnet-ef
次のコマンドを使用してツールを呼び出せます。dotnet-ef
ツール 'dotnet-ef' (バージョン '9.0.7') が正常にインストールされました。

テスト実行

アプリを実行し、テストデータ取得ボタンをクリックすると、DBからデータを取得して一覧表示します。
以下、テストデータのサンプルです。

INSERT INTO "M_Store" VALUES(1, '本店',   '東京都1-1-1');
INSERT INTO "M_Store" VALUES(2, '横浜店', '横浜市2-2-2');

INSERT INTO "M_Item" VALUES(1, '商品A', 100, '2025/07/21 9:00:00');
INSERT INTO "M_Item" VALUES(2, '商品B', 200, '2025/07/21 9:00:00');

INSERT INTO "I_Sales" VALUES(1, '2025/07/21 15:30:15.111', 1);
INSERT INTO "I_Sales" VALUES(2, '2025/07/21 15:40:25.222', 2);

INSERT INTO "I_SalesDetail" VALUES(1, 1, 1, 1);
INSERT INTO "I_SalesDetail" VALUES(1, 2, 2, 5);
INSERT INTO "I_SalesDetail" VALUES(2, 2, 2, 2);

テストデータ取得結果

注意点

  • 実際に使用するときは、10_ファイル情報出力マクロ.xlsmのマクロを実際のDB仕様書にあうように修正する必要があります。
    (項目名や型が記載されている列や、開始行など。)
    また、現状はファイル仕様書サンプル.xlsxを使用して自動生成された結果をコミットしていますので、不要なファイルは削除してください。
    このとき、先に新しいDB仕様書のモデルクラスを生成してから不要ファイルを削除してください。
    (先に削除してしまうと、 ビルドが通らなくなるため、モデル生成コマンド20_CreateModels.batが失敗します。)

Discussion