Dapper Korrekte Objekt- / Aggregatzuordnung

dapper

Frage

Ich habe kürzlich damit begonnen, Dapper als möglichen Ersatz für EF auszuwerten, da ich mit dem generierten SQL nicht sehr zufrieden war und mehr Kontrolle darüber wollte. Ich habe eine Frage bezüglich der Zuordnung eines komplexen Objekts in meinem Domänenmodell. Nehmen wir an, ich habe ein Objekt namens Provider, Provider kann mehrere Eigenschaften vom Typ IEnumerable enthalten, auf die nur zugegriffen werden soll, indem das übergeordnete Provider-Objekt durchlaufen wird (dh aggregierter Root). Ich habe ähnliche Beiträge gesehen, die die QueryMultiple- und eine Map-Extension-Methode erklärt haben, aber ich fragte mich, ob ich eine Methode schreiben wollte, die das gesamte Objekt-Diagramm geladen würde, wenn Dapper dies auf einen Schlag tun würde oder wenn es Stück-Mahlzeit gemacht werden musste. Als ein Beispiel lässt sich sagen, dass mein Objekt etwa wie folgt aussah:

public AggregateRoot
      {
           public int Id {get;set;}
           ...//simple properties
           public IEnumerable<Foo> Foos
           public IEnumerable<Bar> Bars
           public IEnumerable<FooBar> FooBars
           public SomeOtherEntity Entity
           ...
      }

Gibt es eine einfache Möglichkeit, den gesamten Objektgraphen mit Dapper zu füllen?

Akzeptierte Antwort

Ich habe eine ähnliche Situation. Ich habe meine SQL zurückgegeben flach, so dass alle Unterobjekte zurückkommen. Dann verwende ich die Abfrage <>, um den vollständigen Satz abzubilden. Ich bin mir nicht sicher, wie groß deine Sets sind.

So etwas wie das:

var cnn =  sqlconnection();

var results = cnn.Query<AggregateRoot,Foo,Bars,FooBar,someOtherEntity,AggregateRoot>("sqlsomething"
                (ar,f,b,fb,soe)=>{
                    ar.Foo = f;
                    ar.Bars = b;
                    ar.FooBar = fb;
                    ar.someotherentity = soe;
                    return ar;

                },.....,spliton:"").FirstOrDefault();

Das letzte Objekt im Abfrage-Tag ist also das Rückgabeobjekt. Für SplitOn müssen Sie sich die Rückgabe als ein flaches Array vorstellen , durch das das Mapping ausgeführt wird. Sie würden den ersten Rückgabewert für jedes neue Objekt auswählen, damit das neue Mapping dort beginnt.

Beispiel:

select ID,fooid, foo1,foo2,BarName,barsomething,foobarid foobaritem1,foobaritem2 from blah

Das Spliton wäre "ID, fooid, BarName, foobarid". Wenn es über den Rückgabewert lief, wird es die Eigenschaften zuordnen, die es in jedem Objekt finden kann.

Ich hoffe, dass dies hilft, und dass Ihr Return-Set nicht zu groß ist, um flach zurückzukehren.



Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum