Dapper und Unterklassen

dapper

Frage

Ich arbeite mit einem vorhandenen EF-Datenmodell, das unterklassierte Objekte enthält. Das funktioniert gut, wenn Sie mit einzelnen Objekten arbeiten, ist aber ziemlich langsam, wenn Sie eine große Anzahl von Objekten zur Analyse laden.

Ich begann, Dapper als eine Alternative zum Auffüllen von POCO-Objekten zu untersuchen, die für die schreibgeschützte Analyse verwendet werden.

Das Problem ist, ich kann keine Mittel sehen, um eine Objekthierarchie korrekt zu behandeln.

Wenn ich habe

class MyBase
{
}

class MyDerived1 : MyBase
{
}

class MyDerived2 : MyBase
{
}

Dapper MyBase korrekt eine Liste von MyBase

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

Die Multimap-Fähigkeit scheint das Problem nicht zu lösen (oder fehlt mir etwas?).

Gibt es eine Möglichkeit, dies zu lösen, ohne für jede Unterklasse einen Hin- und Rückweg zur Datenbank zu machen?

Akzeptierte Antwort

 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; }
    }

Multi-Mapping oder ein dynamisches Mapping sollte den Zweck erfüllen.

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

Bildbeschreibung hier eingeben

Das dynamische Mapping ist auch sehr cool und wahrscheinlich in deinem Fall flexibler (Danke @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 }));


Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow