精致和子类

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
许可下: CC-BY-SA with attribution
不隶属于 Stack Overflow