2017-06-13 5 views
1

was der beste Weg ist, wie so die folgende ...Nested Konstruktor ruft von Dapper

conn.Query<Foo>(@"SELECT 1, 2, 'ZEBRA'"); 

Say Foo hat einen Konstruktor zu tun ...

public Foo(Bar test, string zebra) 

..Und Bar hat einen Konstruktor wie folgt:

public Bar(int one, int two) 

Dies funktioniert nicht, was wäre der beste Ansatz zu erreichen e das gewünschte Ergebnis.

+0

'Foo (erste int, int zweite, string derp): Um diese (neue Bar (erste, zweite), derp) {}' – Will

Antwort

2

könnten Sie versuchen, nicht-generische Abfrage API (weitere Details sind hier https://stackoverflow.com/a/8995135/229949):

conn.Query(@"SELECT 1 as one, 2 as two, 'ZEBRA' as zebra") 
    .Select(_ => new Foo(new Bar(_.one, _.two), _.zebra); 
1

Versuchen Sie nicht in Ihre reale Modelle direkt von Dapper, Hydrat, wenn sie wie die Konstruktor Anforderungen haben. Stattdessen hydratisieren Sie in eine private/interne Klasse und instanziieren Sie dann und geben Sie die richtigen Modelle zurück.

internal class FooBarQueryModel 
{ 
    public string Zebra { get; set; } 
    public int One { get; set; } 
    public int Two { get; set; } 
} 

conn.Query<FooBarQueryModel>(sql).Select(qm => new Foo(new Bar(qm.One, qm.Two), qm.Zebra)); 
+0

würde dies einen Vorteil haben über die 'dynamische' Reihe Lösung, vielleicht Leistung ? –

Verwandte Themen