Dapper可以处理可空的布尔/位字段吗?[无效]

Nic*_*ckG 5 c# sql-server orm dapper

我是第一次尝试使用Dapper,但是我立即遇到了问题,因为似乎Dapper似乎不能处理可空字段.这让我感到非常惊讶,因为这些非常普遍.

如果我的SQL Server数据库中有一个可以为空的布尔字段并尝试使用Dapper来填充我的C#类上的可空布尔属性,则如果布尔字段包含空值,则抛出异常:

System.FormatException: String was not recognized as a valid Boolean.
Run Code Online (Sandbox Code Playgroud)

这有什么修复或解决方法吗?我发现很难相信Dapper无法处理它,因为它看起来已经存在了一段时间,这是一个非常基本的功能.

编辑:这是我的错!我的专栏实际上是一个nvarchar,碰巧包含0或1,因此我没有注意到.将它更改为BIT(或将C#属性更改为"string?")可以解决问题.

Mar*_*ell 7

是的,工作得很好:

public void SO24607639_NullableBools()
{
    var obj = connection.Query<HazBools>(
        @"declare @vals table (A bit null, B bit null, C bit null);
        insert @vals (A,B,C) values (1,0,null);
        select * from @vals").Single();
    obj.IsNotNull();
    obj.A.Value.IsEqualTo(true);
    obj.B.Value.IsEqualTo(false);
    obj.C.IsNull();
}
class HazBools
{
    public bool? A { get; set; }
    public bool? B { get; set; }
    public bool? C { get; set; }
}
Run Code Online (Sandbox Code Playgroud)