用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();
- 使用MySql MySQLMembershipProvider – autogenerateschema =“true”不起作用?
- 将Membership.GetAllUsers()强制转换为通用列表时出现NotSupportedException
- TransactionScope中的Membership.GetUser()抛出TransactionPromotionException
- 如何设置asp.net认证的属性
- 更新会员资产。 方法不受支持
- ASP.NET成员资格提供程序 – 重置密码function – 电子邮件确认和密码更改
- Custom MembershipProvider:没有为此对象定义的无参数构造函数
- ASP.NET MVC – 跨子域身份validation/成员身份
- 使用会话自定义RoleProvider