Estoy tratando de usar Dapper para interactuar con las tablas del proveedor de membresía SQL de ASP.NET. Envolví la clase SqlMembershipProvider y agregué un método adicional para obtener los MembershipUsers dados ciertos criterios relacionados con algunas tablas personalizadas que tengo.¿Llamar al constructor personalizado con Dapper?
Al consultar los datos con Dapper, parece que Dapper primero instancia la clase con un constructor sin parámetros, y luego "asigna" las columnas devueltas a las propiedades en el objeto.
Sin embargo, la propiedad UserName en la clase MembershipUser no tiene un setter. A juzgar por la línea 1417 en Dapper SqlMapper.cs, el método GetSettableProps()
solo obtiene propiedades configurables.
Intenté hacer una consulta MultiMap para invocar el constructor, pero el problema es que los objetos pasados a la consulta ya no tienen el UserName.
Supongo que podría modificar el método GetSettableProps()
, pero no estoy seguro de si eso funcionará, o si afectará a mi código existente.
¿Hay alguna forma de invocar el constructor personalizado que tiene la clase MembershipUser?
¿O hay un cambio razonable que podría hacerle a Dapper para respaldar mi situación?
** ** ACTUALIZACIÓN
la respuesta de Marc utilizar el método no genérico/Consulta dinámica() era correcta, pero para la posteridad, este es el método que se refería a Dapper interior:
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();
}
¿qué línea 1417 mirada al igual que por cierto puede publicar su código de ejemplo para otros que tal vez capaz de ayudarle rápidamente ..? – MethodMan
Para ser sincero, solo usaría un tipo intermedio aquí - o la API de consulta no genérica (que pasa por "dinámico") ... Tengo un código de ctor que podría extraer de protobuf-net, pero yo ' Realmente no estoy seguro de que sea beneficioso ... –