Rufen Sie custom-Konstruktor mit Dapper?

Ich versuche, Dapper, die Schnittstelle mit dem ASP.NET SQL-Mitgliedschaftsanbieter Tabellen. Ich wickelte den SqlMembershipProvider-Klasse und fügte hinzu, eine zusätzliche Methode, um mir die MembershipUsers gegeben, bestimmte Kriterien in Bezug auf einige benutzerdefinierte Tabellen, die ich habe.

Beim Abfragen der Daten mit Dapper, scheint es, dass Dapper ersten instanziiert die Klasse mit einer parameterlosen Konstruktor, und dann "Karten" die zurückgegebenen Spalten in den Eigenschaften des Objekts.

Jedoch die UserName-Eigenschaft auf der MembershipUser-Klasse keine setter. Zu urteilen, um die Zeile 1417 in der Schmucken SqlMapper.cs, die Methode GetSettableProps() nur bekommt einstellbaren Eigenschaften.

Habe ich versucht zu tun, ein MultiMap-Abfrage, um den Konstruktur aufrufen, aber das problem ist, dass die Objekte übergeben, die in der Abfrage fehlen schon der UserName.

Ich vermute, ich könnte ändern, die GetSettableProps() Methode, aber ich bin mir nicht sicher, ob das funktionieren wird, oder ob es auf meinen vorhandenen code.

Ist es jedenfalls für mich) zum aufrufen des custom-Konstruktor, der MembershipUser-Klasse hat?

Oder gibt es eine vernünftige änderung, die ich machen könnte, um Dapper zu unterstützen meine situation?

** UPDATE **

Marc ' s Antwort auf die nicht-generischen/dynamic Query () - Methode korrekt war, aber für die Nachwelt, das ist die Methode, die ich bezog sich auf innen Dapper:

static List<PropInfo> GetSettableProps(Type t)
{
    return t
          .GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
          .Select(p => new PropInfo
          {
              Name = p.Name,
              Setter = p.DeclaringType == t ? p.GetSetMethod(true) : p.DeclaringType.GetProperty(p.Name).GetSetMethod(true),
              Type = p.PropertyType
          })
          .Where(info => info.Setter != null)
          .ToList();  
}
  • was bedeutet Online 1417 Aussehen btw, können Sie Ihre post-code-Beispiel für andere, die vielleicht in der Lage, schnell zu helfen, Sie..?
  • Um ehrlich zu sein, ich würde nur verwenden Sie eine Zwischenschicht Art hier - oder Nicht-generische API für Abfragen (das geht über "dynamische")... ich habe einige ctor-code konnte ich lift von protobuf-net, aber ich bin mir wirklich nicht sicher, es wäre von Vorteil...
Schreibe einen Kommentar