2012-06-27 19 views
14

Oldukça basit, mevcut sistemimizi EF'den Dapper'e dönüştürüyorum. Çeşitli kurumsal nedenlerle veritabanını gerçekten değiştiremiyoruz, bazı tablolarda DateTime2 türü sütunlar var. Dapper, herhangi bir .Net DateTime DbType.DateTime dönüştürür.Dapper'ı datetime2'ye eşleştirmek için nasıl alabilirim?

Birisi daha önce buna karşı çarpmış olmalı ve kolay bir çözüm bulmuş olmalı?

cevap

12

Dapper, kod tabanınıza eklediğiniz bir single file'dir.

(hat 300 civarında) değiştirin:

 typeMap[typeof(Guid)] = DbType.Guid; 
     typeMap[typeof(DateTime)] = DbType.DateTime; 
     typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset; 
     typeMap[typeof(byte[])] = DbType.Binary; 

olarak: Sadece dosyayı düzenlemek

 typeMap[typeof(Guid)] = DbType.Guid; 
     typeMap[typeof(DateTime)] = DbType.DateTime2; 
     typeMap[typeof(DateTimeOffset)] = DbType.DateTimeOffset; 
     typeMap[typeof(byte[])] = DbType.Binary; 

Düzenleme:
eşleştirmeleri o bloğun altındaki da bir null DateTime var, satır 319:

 typeMap[typeof(DateTime?)] = DbType.DateTime; 
     typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset; 
To

: BuINSERT 's öncesine uygulanmalıdır

SqlMapper.AddTypeMap(typeof(DateTime), System.Data.DbType.DateTime2); 

:

 typeMap[typeof(DateTime?)] = DbType.DateTime2; 
     typeMap[typeof(DateTimeOffset?)] = DbType.DateTimeOffset; 
+0

Bazıları DateTime ve diğerleri DateTime2 ise? –

+0

@MetroSmurf Aslında, DateTime2 ile yapmanın en iyi seçenek olduğunu düşünüyorum. DATETIME2, SQL Server'da DATETIME ve tam tersi örtük bir dönüşüme sahiptir. Tek sorun, zaman damgası üzerinde hassasiyet kaybı olacaktır, çünkü .Net DateTime, SQL Server DATETIME'den daha hassastır. Bu yıllarca bilinen bir konu olmuştur, ancak DATETIME2'yi ilk etapta kullanmanızın nedeni budur. – Randolpho

+1

Bunu denedim. Ancak, bir DateTime2'yi SQL'de bir DateTime'a ekleyemezsiniz. Bir hata olsun. Veya daha doğru olması için, komut parametresini DateTime2 olarak bildirirseniz, SQL'in bunu DateTime'a eklemenize izin vermeyeceğini tahmin ediyorum (SQLClient'in engellenip engellemediğinden emin değilim ya da SQL'in kendisi ise). – Dirk

27

bir similar question şimdi çok daha kolay bir çözüm yoktur. Teşekkürler, Igand.

+1

Gelecek nesillere yönelik not: Bu satır yardımcı olmazsa, eşlemenin uygulandığından emin olun, bu verileri SEÇİNİZ ve SELECT onları seçmeye başlamadan önce hala bekler. Onun bariz, ama benim için saatin üzerinde beni aldı, neden test başarısız devam ediyor :) – Igand

+0

Teşekkürler, @Igand Sadece cevapta bu yüzden kimse onu özlüyor. =) –

İlgili konular