精緻和子類

dapper

我正在使用包含子類對象的現有EF數據模型。在處理單個對象時工作正常,但在加載大量對象進行分析時速度很慢。

我開始探索Dapper作為填充用於只讀分析的POCO對象的替代方法。

麻煩的是,我看不到任何正確處理對象層次結構的方法。

如果我有

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

Dapper正確填充了MyBase列表

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

Multimap功能似乎沒有解決問題(或者我錯過了什麼?)。

有沒有辦法解決這個問題,沒有為每個子類進行一次數據庫往返?

一般承認的答案

 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");

在此處輸入圖像描述

動態映射也很酷,在你的情況下可能更靈活(謝謝@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合法嗎? 是的,了解原因