使用 .NET Dapper,我在获取包含整数值 (0/1) 的数据库字段以映射到类中可为空的布尔属性时遇到问题。
为了简单起见,我已经剥离并将类重命名为重现问题所需的最低限度:
public class Test
{
public bool? TestField { get; set; }
}
如果调用以下代码来填充 Test 类:
var Results = DBConnection.Query<Test>("SELECT 0 As TestField]").ToList();
将抛出以下错误:
Invalid cast from 'System.Int32' to 'System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]
如果我删除问号,使该字段成为不可为空的布尔值(即 public bool TestField),一切正常。
直接的答案可能似乎是删除可空值并收工。但是,不起作用的原因是因为我们正在使用同一个类来序列化与 Web 服务之间的记录,并且我们需要能够区分 false 和 null 之间的区别。我想有两个类,一个具有可为空的属性类型,一个没有,但是我有额外的开销来维护两个类而不是一个。
在属性集中进行自定义数据转换将是理想的。不过,我在 dapper 文档中没有发现任何东西表明这甚至是可能的。