ORMのアイデア

特に関連エンティティをそのままマップする場合。

  • リフレクションを使う
  • delegate void setEntity(object entity); を使う

リフレクションを使う

遅そう。件数増えると致命的

delegate void setEntity(object entity); を使う

マップメソッドを関連エンティティに対して用意する必要がある。
generics 使いたいけど 実行時までタイプが分からないので書けない。

いや、もっと進めよう

delegate void mapEntity(DataRow row); を使う
rowから関連エンティティにマップし、自身のフィールドにセットする。

class Hoge : Entity{
  int field1;
  int field2;
  string field3;
  Huga huga;

  public override void map(DataRow row){
     field1 = row["field1"];
     field2 = row["field2"];
     field3 = row["field3"];

  }
  public static void mapHuga(Hoge hoge,DataRow row){
    Huga h = new Huga();
    h.map(row);
    if(!h.isEmpty()){
      hoge.huga = h;
    }
  }
}
class Mapper{
  public delegate void mapEntity(DataRow row); 
  delegate mapEntity mapAssociation;
  public Hoge map(DataSet dataset){
    Hoge hoge = new Hoge();
    hoge.map(dataset.Tables[0].Rows[0]);
    mapAssotiato(hoge,dataset.Tables[0].Rows[0]);
  }
}