🚀
Dapper.FastCrud.ModelGeneratorでスキーマ名を明示的に指定する
Dapper.FastCrud.ModelGeneratorを利用することで、DapperおよびDapper.FastCrudから利用できるテーブルに対応するクラスを手軽に作成することができます。
Dapper.FastCRUD:ModelGeneratorを使う - nuits.jp blog
しかし標準のテンプレートではスキーマ名が指定されないため、デフォルトのスキーマ(SQL Server だと dbo)だけ利用している分には問題ないのですが、任意のスキーマを利用していた場合、自動生成されたコードでは実行時にエラーになります。
なおGistに、この問題とあわせて、数字始まりのカラムでコンパイルエラーになる問題にも対応したテンプレートを公開しています。こちらから GenericModelGenerator.tt と SampleModelGeneratorConfig.tt の二つのファイルをコピペすることで、対応することもできます。
Template for setting Schema name for Dapper.FastCrud.ModelGenerator · GitHub
あと良かったらこちらもどうぞ。
https://hatenablog-parts.com/embed?url=http%3A%2F%2Fwww.nuits.jp%2Fentry%2Fdapper-fastcrud-items
それではコード生成時に明示的にスキーマ名を指定するように、テンプレートを修正する方法を説明します。
1. 前提条件
- Dapper.FastCrud.ModelGenerator 2.4.1
2. GenericModelGenerator.ttを編集する
44行目あたりに、つぎのようなコードがあります。
/// <summary>
/// A class which represents the <#=tbl.Name#> <#=(tbl.IsView)?"view":"table"#>.
/// </summary>
[Table("<#=tbl.Name#>")]
これを、つぎのように修正します。
/// <summary>
/// A class which represents the <#=tbl.Name#> <#=(tbl.IsView)?"view":"table"#>.
/// </summary>
[Table("<#=tbl.Name#>", Schema = "<#=tbl.Schema#>")]
すると、生成されたコードが、つぎのようにスキーマ名が明示的に設定されるようになります。
/// <summary>
/// A class which represents the EmployeePayHistory table.
/// </summary>
[Table("EmployeePayHistory", Schema = "HumanResources")]
public partial class EmployeePayHistory
{
...
以上です。
Discussion