用Dapper调用自定义构造函数?

我正在尝试使用Dapper与ASP.NET SQL Membership Provider表进行交互。 我包装了SqlMembershipProvider类,并添加了一个额外的方法来获取MembershipUsers给出一些与我自己的一些自定义表相关的标准。

使用Dapper查询数据时,似乎Dapper首先使用无参数构造函数实例化该类,然后将返回的列“映射”到对象的属性中。

但是,MembershipUser类上的UserName属性没有setter。 从Dapper SqlMapper.cs中的第1417行开始, GetSettableProps()方法只获取可设置的属性。

我试图做一个MultiMap查询来调用构造函数,但问题是传递给查询的对象已经缺少UserName。

我猜我可以修改GetSettableProps()方法,但我不确定它是否可行,或者它是否会影响我现有的代码。

反正我有没有调用MembershipUser类有的自定义构造函数?

或者我是否可以对Dapper做出合理的改变以支持我的情况?

** 更新 **

Marc使用非generics/动态Query()方法的答案是正确的,但对后人来说,这是我在Dapper中引用的方法:

 static List 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(); } 

我会在这里使用非通用的查询API …

  return connection.Query(sql, args).Select(row => new AnyType((string)row.Foo, (int)row.Bar) { Other = (float)row.Other }).ToList(); 

使用此方法,您可以使用“动态”作为中间步骤,同时使用非默认构造函数和属性赋值,而无需任何更改。

我用这个也许对某人有所帮助

 YourList = connection.Query(Query, arg) .Select(f => new ClassWithConstructor(f.foo,f.bar)) .ToList();