Dapper peut-il gérer les champs booléens / bits nullables? [INVALIDE]

c# dapper orm sql-server

Question

J'essaie d'utiliser Dapper pour la première fois, mais j'ai immédiatement rencontré le problème en ce sens qu'il ne semble pas que Dapper puisse gérer les champs nullables. Cela me surprend beaucoup car ils sont extrêmement communs.

Si j'ai un champ booléen nullable dans ma base de données SQL Server et que j'essaie d'utiliser Dapper pour remplir la propriété booléenne nullable sur ma classe C #, une exception est levée si le champ booléen contient une valeur nulle:

System.FormatException: String was not recognized as a valid Boolean.

Y a-t-il une solution ou une solution à ce problème? J'ai du mal à croire que Dapper ne puisse pas gérer cela, car il semble que cela existe depuis un certain temps et qu'il s'agit d'une fonction extrêmement basique.

EDIT: C'était mon erreur! Ma colonne était en fait un nvarchar qui contenait 0 ou 1, et en tant que tel, je n'avais pas remarqué. Le changer en BIT (ou la propriété C # en "string?") Résout le problème.

Réponse acceptée

Oui, ça marche très bien:

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; }
}

Réponse populaire

Comme Dapper ne fait pas trop de plomberie, le jeu d'enregistrements provenant de la base de données contient une chaîne, indiquée par l'erreur. Essayez de vérifier le type de colonne et, quand il est clair, vous pouvez modifier la classe DTO en conséquence ou la convertir d'une manière ou d'une autre dans la requête.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi