ショボイO/R Mapper(2)
やっぱりJOIN(belongs_to)も必要です。
…ですよねー(・∀・;)
っというわけで、やはり何かをパクッた感じでAssociationAttributeを追加。
エンティティクラスはこんな風に定義。
[Table] public class Department { [Column(PrimaryKey=true)] public int Id { get; set; } [Column] public string Name { get; set; } } [Table] public class Employee { [Column(PrimaryKey=true)] public int No { get; set; } [Column] public string Name { get; set; } [Column] public int DepartmentId { get; set; } [Association(ThisKey="DepartmentId", OtherKey="Id")] public Department Department { get; set; } }
Employeeの一覧を取得する際に、DepartmentのテーブルをLEFT JOINして、その内容はDepartmentプロパティに設定してくれるような処理に。
関連エンティティまで引っ張ってくるかは一覧取得時のオプションで指定可能。
Criteriaを使って、ソート、ページング、複数条件にJOINも指定すれば、この程度のSQLは吐けるものにしました(・∀・)
SELECT * FROM ( SELECT ROW_NUMBER() OVER (ORDER BY t0.department_id DESC, t0.no) AS _row_number, t0.no AS t0__no, ... , t1.id AS t1__id, ... FROM employee AS t0 LEFT JOIN department AS t1 ON t0.department_id = t1.id WHERE t0.department_id = @where__t0__department_id OR t0.department_id = @where__t0__department_id2 ) AS t WHERE _row_number BETWEEN 11 AND 20
まあ、とりあえずこのあたりまでを自動化できれば、後はSQLを書いても良いかな、っというカンジで。
で、任意のSQLからDTOへマッピングを行うSelect()メソッドも追加(・ω・)
任意のSQLを書くとすると、バインド変数の所がData Provider固有になってしまうのがチト問題ですが。
そこは簡易SqlTokenizerでも作って、Data Provider毎の変換をが出来るようにするかな〜(´∀`)