2015-05-06 7 views
5

Ben Dapper.NET kullanarak ve am ben gelecek kodu çalıştırdığınızda:Dapper.NET: varchar (4000) varsayılan

using (SqlConnection con = new SqlConnection(connectionString)) 
     { 
      con.Open(); 
      con.Execute(@" insert Clients(name) values(@Name)", new {Name = "John"}); 
      con.Close(); 
     } 
o yürütür sorgu sonraki biridir

:

(@Name nvarchar(4000)) insert Clients(name) values(@Name) 

Ve sorum şu: Dapper neden bir dizeyi nvarchar'a çeviriyor (4000)? Ben veritabanı üzerinde ... Yani, adı alan bir nvarchar (50) ...

herkes bu hatayı karşıya mı? Nasıl tamir edersin? Bunun gibi başka bir hata buldunuz mu?

+0

(ama saf varsayım) sahipse de Zarif tablo yapısı hakkında hiçbir şey bilmediği için, ve .NET 'string', bellekten başka bir boyut sınırlaması olmadan potansiyel olarak UTF-16'dır (bu nedenle ANSI olmayan bir dizedir). Bu maksimum kullanılabilir uzunluk ile nvarchar türüne çevirir. Bunun bir hata olmadığını söyleyebilirim, ancak kendiniz doğrulama yapmanız ya da 'INSERT' üzerindeki veri bütünlüğü ihlali istisnalarını yakalamanız gerekiyor. –

cevap

7

Bu bir hata değil. Dapper, dize parametresi için bir SQL veri türü seçmeli, veritabanı yapısına bakmadan (sorgunuzu ayrıştırmaktan ve parametreyi belirli bir sütuna eklediğinizden emin olmamaya kadar).

bu yaptıklarını düşünün:

insert Clients(name) values(@Name + 'abc') 

@name 47 karakter olabilir bulmalıyız Zarif mıdır? İstersen

Sen parametresinin boyutu hakkında daha spesifik olabilir:

con.Execute(@" insert Clients(name) values(@Name)", 
    new { Name = new DbString { Value = "John", Length = 50 }}); 
söyleyebilirim
+0

Teşekkürler ve bunu daha okunaklı olması için nasıl yapabilirim? Çünkü çok fazla alan içeren bir ek varsa (string alanları) çok çirkin olurdu ... Ve başka türde bir şey var mı? Teşekkürler –