2014-07-07 19 views
5

Dapper'i ilk kez kullanmaya çalışıyorum, ama hemen Dapper'ın null alanlarla başa çıkabileceği görünmüyor. Bu, son derece yaygın olduğu için beni çok şaşırtıyor.Dapper null işaretlenebilir boole/bit alanlarını kullanabilir mi? [INVALID]

System.FormatException: String was not recognized as a valid Boolean. 
: Benim SQL Server veritabanında bir null mantıksal bir alan varsa ve denemek ve benim sınıf C# üzerinde null boole özelliği doldurmak için Dapper kullanırsanız

, bir istisnası atılır boolean alan bir boş değer içeriyorsa

Bunun için herhangi bir düzeltme veya geçici çözüm var mı? Dapper'ın bunu bir süredir göründüğü gibi idare edemeyeceğine inanmakta zorlanıyorum ve bu son derece basit bir işlev.

DÜZENLEMEK: Bu benim hatamdı! Sütüm aslında 0 veya 1'i içeren bir nvarchardı ve ben de fark etmedim. BIT (veya C# özelliği "string?") Olarak değiştirmek sorunu giderir.

+0

Tablo tanımınızı ve istisna attığınız Dapper kodunuzu gönderir misiniz? –

+3

"String" den bahsediyor olması, bana problemi veri/sorgunuz olabilir ... burada sütun nedir? –

+0

Sütun aslında bir SOL JOIN sonucudur ve SSIS'de DB boş olarak gösterilir. Belki de bu Dapper tarafından bool olarak kabul edilmez? – NickG

cevap

7

Evet, gayet güzel çalışıyor: Zarif çok fazla su tesisatı yapmaz yana

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

Haklısınız. Ben bir aptalım. Sütüm bir NVARCHAR ile eşlenmişti. Her nasılsa benim önceki (non-dapper) kod bunu bir şekilde okundu olarak fark etmemişti ... Belki de bu soruyu silmeli miyim? – NickG

+0

@NickG tamamen size bağlı –

+0

Başka birinin aynı aptal hale gelmesi durumunda burada bırakacağım hata :) – NickG

0

, veritabanından gelen kayıt kümesi bir dize, bir hata belirttiği içerir. Sütun türünü kontrol etmeye çalışın ve net olduğunda DTO sınıfını buna göre değiştirebilir veya sorguya bir şekilde atayabilirsiniz.