読者です 読者をやめる 読者になる 読者になる

けさらんぱさらん

方向性は定めず、ただ思いつくままに

Dapper.Netの続きの続き

まさかの3連投という奇跡です。
正直、連投しないとすぐにやる気なくなっちゃうので
がんばってみました。

前回は、1対1の関係のテーブルをJoinしてマップしましたが
今回は、1対多の関係のテーブルがマップできるかを試してみます。

IDbConnection db = new OracleConnection("User Id=test;Password=pass;Data Source=xe;");

db.Open();

var sql = "select \"Group\".ID as GroupID, \"Group\".Name as GroupName,"+
  "Member.MEMBER_ID as MemberID, Member.MEMBER_NAME as MemberName, Member.GROUP_ID as GroupID" +
  " from GROUPS \"Group\" inner join MEMBER Member on \"Group\".ID = Member.GROUP_ID" +
  " where \"Group\".ID = :id";

var group = db.Query<Group, IEnumerable<Member>, Group>( sql,
  ( g, m ) => { g.Members = m; return g; },
  new { id = 1 }, splitOn: "GroupID" ).SingleOrDefault();

Console.WriteLine( group.GroupID + "|" + group.GroupName );
group.Members.ToList().ForEach( m => Console.WriteLine( m.MemberName ) );

また残念なことにクラス名とSQL予約語がかぶるとか・・・
見づらい


これでさくっと取得できればうれしかったのですが、エラーです。

値を Null にすることはできません。
パラメーター名: con

こんなん出ました。
conというパラメータに覚えが無いのでおそらくDapper側のなにかなんでしょう
ちょっとソース見ないとわからなそうです。
もしかしたらまったくアプローチが違うのでしょうか
もしくは、1対多は、一発でマッピングまで持っていくのは無理なのかもしれないですね


まあまた時間がある時に調べて分かればアップします。