ダッパーとサブクラス

dapper

質問

私は、サブクラス化されたオブジェクトを含む既存のEFデータモデルを使って作業しています。個々のオブジェクトを扱うときはうまく動作しますが、分析のために多数のオブジェクトをロードするとかなり遅くなります。

私は、読取り専用分析に使用されるPOCOオブジェクトを作成するための代替手段としてDapperを検討し始めました。

問題は、オブジェクト階層を正しく処理する手段がないことです。

私が持っているなら

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

DapperはMyBaseリストを正しく入力します

var mine = conn.Query<MyBase>("SELECT * from MyTable");

Multimap機能は問題を解決していないようです(何か不足していますか?)。

これを解決する方法はありますか?サブクラスごとにデータベースへの1回のラウンドトリップを行うことはできませんか?

受け入れられた回答

 public class MyBase
    {
        public String BaseProp { get; set; }
    }

    public class MyDerived1 : MyBase
    {
        public String Derived1Prop { get; set; }
    }

    public class MyDerived2 : MyBase
    {
        public String Derived2Prop { get; set; }
    }

マルチマッピングまたはダイナミックマッピングは、そのトリックを行う必要があります。

MM:

String query = "SELECT * FROM Table";

var res = conn.Query<MyBase, MyDerived1, MyDerived2, Tuple<MyBase, MyDerived1, MyDerived2>>(query, (b, d1, d2) => Tuple.Create(b, d1, d2), splitOn: "Derived1Id,Derived2Id");

ここに画像の説明を入力

動的マッピングも非常に涼しく、おそらくあなたのケースでもっと柔軟です(Thanks @ Sam!)

var res = conn.Query<dynamic>(query).Select(x => new Tuple<MyBase, MyDerived1, MyDerived2>(new MyBase() { BaseProp = x.BaseProp },
                                                                                                           new MyDerived1() { Derived1Prop = x.Derived1Prop },
                                                                                                           new MyDerived2() { Derived2Prop = x.Derived2Prop }));


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ