Usando el siguiente código de ejemplo como contexto ... Cuando ejecuto esta consulta obtengo el campo 'Id' volviendo como valor predeterminado (que es 0 para un int). Me gustaría decirle a dapper que se ejecute de manera que genere una excepción si hay una columna en el conjunto de resultados que no se asigna a una propiedad en mi objeto de resultado. (Entiendo que el problema es que necesito eliminar la 'd' adicional en la consulta SQL, pero me interesa que esto se exponga más explícitamente)
No he podido encontrar nada sobre este tema. Por favor, avíseme si esto es posible con Dapper.
Gracias de antemano (además de este número, y para cualquiera que no haya dado el paso, ¡Dapper realmente es lo mejor desde el pan de molde!).
class CustomerRecord
{
public int Id { get; set; }
public string Name { get; set; }
}
CustomerRecord[] GetCustomerRecords()
{
CustomerRecord[] ret;
var sql = @"SELECT
CustomerRecordId AS Idd,
CustomerName as Name
FROM CustomerRecord";
using (var connection = new SqlConnection(this.connectionString))
{
ret = connection.Query<CustomerRecord>(sql).ToArray();
}
return ret;
}
Puede crear su propio mapa de tipos donde use DefaultTypeMap
de Dapper y lanzar una excepción cuando no puede encontrar al miembro:
public class ThrowWhenNullTypeMap<T> : SqlMapper.ITypeMap
{
private readonly SqlMapper.ITypeMap _defaultTypeMap = new DefaultTypeMap(typeof(T));
public ConstructorInfo FindConstructor(string[] names, Type[] types)
{
return _defaultTypeMap.FindConstructor(names, types);
}
public ConstructorInfo FindExplicitConstructor()
{
return _defaultTypeMap.FindExplicitConstructor();
}
public SqlMapper.IMemberMap GetConstructorParameter(ConstructorInfo constructor, string columnName)
{
return _defaultTypeMap.GetConstructorParameter(constructor, columnName);
}
public SqlMapper.IMemberMap GetMember(string columnName)
{
var member = _defaultTypeMap.GetMember(columnName);
if (member == null)
{
throw new Exception();
}
return member;
}
}
Lo malo de esto es que tienes que configurar todos los mapas de tipo para cada entidad:
SqlMapper.SetTypeMap(typeof(CustomerRecord), typeof(ThrowWhenNullTypeMap<CustomerRecord>));
Sin embargo, esto podría configurarse utilizando la reflexión.