第 5 回 プロジェクトテンプレートを作ってみよう (後編)
こんにちは!
前回から、そのテンプレート ベースをカスタマイズして、独自のプロジェクトテンプレートを作る方法をご紹介しています。 今回はその後編です。
DBMS に合わせてテンプレートベースをカスタマイズする (SQL Server 以外の DBMS を使用する場合のみ)
テンプレートベースは、既定では SQL Server 向けのデータアクセスクラスが使われています。 もし、システム開発プロジェクトで、Oracle など、SQL Server 以外の DBMS を使用する場合、その DBMS 向けのデータアクセスクラスに切り替える必要があります。 (システム開発プロジェクトで SQL Server を使用する場合は、この手順は必要ありません。)
ここでは、PostgreSQL を使用する場合のカスタマイズ手順をみてみましょう。 (PostgreSQL 以外の DBMS をお使いの場合も、手順はほぼ同じです。 以下、PostgreSQL のところを、それぞれの DBMS に読み替えてください。)
PostgreSQL 用のデータアクセスクラスをテンプレートベースに含める
既定で使用するデータアクセスクラスを、PostgreSQL 用のものに変更する
サンプルアプリケーションを修正する
- PostgreSQL データベースを作成する
- PostgreSQL 用に、D 層クラスを再生成する
- 以下のファイルを実行し、D 層自動生成ツールを起動してください。
C:\root\programs\C#\Frameworks\Tools\DaoGen_Tool\bin\Debug\DaoGen_Tool.exe
- 以下のように設定して、「DBに接続しテーブル一覧を取得する」ボタンを押してください。
- データプロバイダを選択する : PostgreSQL Npgsql
- 接続文字列 : 作成した PostgreSQL データベースへの接続文字列
- うまくいけば、リストボックスに「shippers」というテーブルが表示されたと思います。 「shippers」を選択して、「列情報のロード」ボタンを押してください。
- D 層自動生成ツールでファイルを自動生成する場合、主キー情報が必要になりますが、D 層自動生成ツールでは、PostgreSQL の主キー情報をロードしてくれません。 なので、手動で主キー情報を設定する必要があります。 「shippers」テーブルを選択して、「選択したテーブルの主キーを設定」ボタンを押してください。
- 主キー情報の設定画面で、「001 : shipperid」にチェックを入れて、「閉じる」ボタンを押してください。
- 「▼ D層定義情報を生成する ▼」ボタンを押してください。
- 適当なところに、データベースのスキーマ情報を CSV として保存してください。
- 「~ Dao・SQLファイルを生成する ~」ボタンを押してください。
- 以下のように設定して、「- Dao・SQL、DTOファイルを生成する -」ボタンを押してください。
- D 層定義情報ファイル : 先ほど生成した CSV ファイルのパス
- ソース テンプレート ファイル : C:\root\files\tools\DGenTemplates
- 出力ファイル : ファイルの出力先のフォルダパス
ここがポイント!
先ほどの手順で、データベースのスキーマ情報を CSV で保存すると、以下の 3 つのファイルが生成される。
<指定した名前>.csv
<指定した名前>_DBTypeInfo.csv
<指定した名前>_DotNetTypeInfo.csv
本手順で指定するのは、一番最初の<指定した名前>.csvである。
また、必要に応じてその他の設定を実施する。その他の設定内容については、Open 棟梁の利用ガイドをご覧いただきたい。
- 既定では、SQL ファイルは以下のフォルダに格納します。 このため、生成された SQL ファイル (.sql)、XML ファイル (.xml) を、以下のフォルダに移動してください。
C:\root\files\resource\Sql
ここがポイント!
D 層自動生成ツールを使用すると、拡張子が.sqlのファイルと、.xmlのファイルが生成される。 これは、静的なクエリを .sql ファイルに記述し、動的なクエリ (条件によって変わるクエリ) を .xml ファイルに記述するためである。 ともにデータベースへのクエリを記述するためのファイルであるため、上記のフォルダに移動する。
- C:\root\files\resource\Sql\Daoshippers_S1_Insert.sql をエディターで開き、主キーの値をシーケンスから取得するように修正してください。
INSERT INTO
"shippers"
(
"shipperid",
"companyname",
"phone"
)
VALUES
(
nextval('TS_ShipperID'),
@companyname,
@phone
)
- 同様に、C:\root\files\resource\Sql\Daoshippers_D1_Insert.xml も修正してください。
INSERT INTO
"shippers"
(
<DELCMA>
"shipperid",
<INSCOL name="companyname">"companyname",</INSCOL>
<INSCOL name="phone">"phone",</INSCOL>
</DELCMA>
)
VALUES
(
<DELCMA>
nextval('TS_ShipperID'),
<IF>@companyname,<ELSE></ELSE></IF>
<IF>@phone,<ELSE></ELSE></IF>
</DELCMA>
)
- サンプルアプリケーションを修正する。
ここでは、名前を修正した「GyomuApp」を修正していきます。- C:\root\programs\C#\Samples\WebApp_sample\GyomuApp\GyomuApp.sln を開きます
- [App_Code]-[sample]-[Dao] を右クリックし、[追加]-[既存の項目] を選択してください。
- ダイアログで、先ほど作成した Daoshippers.cs を選択します。すでに同じ名前のファイルがありますので、置き換えるかどうか聞かれますので、「はい」を選択してください
- web.config または app.config のタグの接続文字列を、PostgreSQL のものに修正してください。
<connectionStrings>
<add name="ConnectionString_SQL"
connectionString="PostgreSQL データベースへの接続文字列"/>
</connectionStrings>
- 既存のサンプルとは、クラス名やプロパティ名などで、大文字小文字が異なるものがありますので、一つ一つ修正していきます。
(例) DaoShippers -> Daoshippers ここがポイント!
PostgreSQL 用に再生成した D 層クラスでビルドすると、「DaoShippers が見つかりません」というエラーが発生する。 これは、SQL Server 用に生成された D 層クラスと、PostgreSQL 用に生成された D 層クラスでは、生成されるクラス名やプロパティ名などの大文字小文字が異なるためである。
(例)SQL Server 用に生成された D 層クラスは「DaoShippers」という名前で生成される。
一方、PostgreSQL 用に生成された D 層クラスは「Daoshippers」という名前で生成される。("s" が小文字になっている)
このため、このような大文字小文字を修正する作業が必要になる。
サンプルアプリケーションを実行し、動作を確認する。いかがでしたか? 大変な作業ですが、テンプレートのカスタマイズにより、多種多様なアーキテクチャへ対応させることができます。
この部分は、アプリケーションの開発基盤を作るところですから、とても大事なところです。 ここでミスると、アプリケーション開発プロジェクト自体が失敗するリスクもあります。 そこで、Open 棟梁のコミュニティメンバー各社のご協力により、有償サポートも行っています。 ぜひご活用ください!
Open棟梁の有償サポートの提供開始のお知らせ - OSSコンソーシアム
https://www.osscons.jp/jovs2kdvk-537/#_537
今回はここまでとします。 次回は、Open 棟梁の付属ツールを見ていこうと思います。お楽しみに!