使用下面的示例代码作为上下文...当我运行此查询时,我将'Id'字段作为默认值返回(对于int为0).我想告诉dapper以一种方式运行,如果结果集中有一列没有映射到我的结果对象上的属性,它将抛出异常.(我知道问题只是我需要在SQL查询中删除额外的'd',但我有兴趣让它更明确地暴露自己)
我一直无法找到关于这个主题的任何内容.如果Dapper可以做到这一点,请告诉我.
提前谢谢(除了这个问题,对于没有采取过任何措施的人来说,Dapper真的是切片面包以来最棒的东西!).
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;
}
Run Code Online (Sandbox Code Playgroud)
您可以在使用Dapper的地方创建自己的类型映射,DefaultTypeMap
并在找不到成员时抛出异常:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
缺点是您必须为每个实体配置所有类型映射:
SqlMapper.SetTypeMap(typeof(CustomerRecord), typeof(ThrowWhenNullTypeMap<CustomerRecord>));
Run Code Online (Sandbox Code Playgroud)
但是,可以使用反射进行配置。
归档时间: |
|
查看次数: |
1571 次 |
最近记录: |