Dapper.FastCRUDはDapperのExtensionライブラリです。DapperのExtensionライブラリは多数ありますが、以前に簡単に比較記事を書いていますので、良かったらご覧ください。
Dapperの拡張ライブラリは何がいいのか?ちょっとだけ調べてみた - nuits.jp blog
Dapper.FastCRUDにはDapper.FastCrud.ModelGeneratorという、データベースのスキーマからModelクラスを自動生成してくれるT4テンプレートがNuGet上に公開されています。
本エントリーでは、Dapper.FastCrud.ModelGeneratorを利用してModelクラスを自動生成する方法を解説します。
あと良かったらこちらもどうぞ。
- 1. 前提条件
- 2. コンソールプロジェクトを作成する
- 3. NuGet パッケージをインストールする
- 5. App.configにConnectionStringを定義する
- 6. SampleModelGeneratorConfig.ttを修正する
- 7. コードを生成する
- 8. コードを再生成する
- 9. 生成されたコードを利用する
1. 前提条件
- Visual Studio 2017 Version 15.5.6
- .NET Framework 4.7.1
- SQL Server 2017 Developer Edition(14.0.1000.169)
- SQL Server上にサンプルDB「Northwind」を設定済みである
- Windows認証で上記DBが利用できる状況にある
Northwind の設定方法は、つぎをご覧ください。
2. コンソールプロジェクトを作成する
ここでは Northwind という名称で作ります。
3. NuGet パッケージをインストールする
つぎのパッケージをインストールします。
Dapper.FastCrud.ModelGenerator をインストールすると、Modelsフォルダが作成され二つの「~.tt」ファイルが作成されます。これは 「T4 テキスト テンプレート」といい、ソースコードを自動生成するテンプレートになります。
これを利用して Dapper から利用できるテーブルにマッピングするクラスを生成します。
5. App.configにConnectionStringを定義する
App.config ファイルにつぎのように ConnectionString の設定を追記します。
<?xml version="1.0" encoding="utf-8" ?> <configuration> <connectionStrings> <add name="Northwind" connectionString="Data Source=localhost;Initial Catalog=Northwind;Integrated Security=True;" providerName="System.Data.SqlClient"/> </connectionStrings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.1" /> </startup> </configuration>
6. SampleModelGeneratorConfig.ttを修正する
6.1. ファイル名を変更する
ソースコードは SampleModelGeneratorConfig.tt を利用して生成します。
基本的に自動生成されたソースはそのまま利用し手で修正するのは避け、DBに変更があった時は再びテンプレートからすべてのクラスを再生成したほうが問題がないでしょう。
このため SampleModelGeneratorConfig.tt はずっと残して構成管理もします。という事で、「Sample」はちょっとよろしくないため、ModelGeneratorConfig.tt などに変更しましょう。
6.2. ModelGeneratorConfig.ttを修正する
ModelGeneratorConfig.ttを開いて、「ConnectionStringName」と「Namespace」を適切な値に修正しましょう。
今回の場合、つぎのように修正します。
<#@ template hostspecific="True" #> <# /* This is the configuration file for GenericModelGenerator.tt */ // Settings ConfigPath = @""; //Looks in current project for web.config or app.config by default. You can override it to point to a different config file. ConnectionStringName = "Northwind"; // Uses the last connection string in the config if not specified Namespace = "Northwind.Models";
ConnectionStringName は App.config で定義した ConnectionString の名称を指定します。App.config から ConnectionString を取得してデータベースへ接続し、データベースのメタデータを取得してコードを生成しています。
7. コードを生成する
ビルドします。
すると ModelGeneratorConfig.tt ファイルのしたの ModelGeneratorConfig.cs にテーブルに対応するクラスが生成されます。
8. コードを再生成する
データベースが変更されたら、テンプレートからコードを再生成します。
ModelGeneratorConfig.tt を右クリックし、「カスタムツール の実行」を選択することで再生成されます。
9. 生成されたコードを利用する
それでは試しに使ってみましょう。「System.Configuration」へのアセンブリ参照を追加し、Program.cs につぎのように記述して、実行してみましょう。
static void Main(string[] args) { var settings = ConfigurationManager.ConnectionStrings["Northwind"]; var factory = DbProviderFactories.GetFactory(settings.ProviderName); using (var connection = factory.CreateConnection()) { connection.ConnectionString = settings.ConnectionString; connection.Open(); foreach (var employee in connection.Find<Employee>(statement => statement .OrderBy($"{nameof(Employee.EmployeeID)}"))) { Console.WriteLine($"EmployeeID:{employee.EmployeeID} FirstName:{employee.FirstName} LastName:{employee.LastName}"); } } Console.ReadLine(); }
実行すると、つぎのように表示されます。
以上です。