2010-12-09 8 views
5

Ben bu sorulara benzer bir sorun yaşıyorum:NHibernate 2.1.2 atma DateTime boş taşma istisna

NHibernate 2.* mapping files: how to define nullable DateTime type (DateTime?)?

NHibernate won't persist DateTime SqlDateTime overflow

Ben NHibernate 2.1.2 ve FluentNhibernate 1.0.0.636 kullanıyorum . NHibernate 2.x ile null olan DateTime? sorunu düzeltilmeli ve eşleştirmemle özel bir şey yapmamalıyım. Buna göre, tüm DateTime özellikleri basitçe şöyle ayarlanır: veritabanıma (SQL2008) olarak

public virtual DateTime? CreatedOn { get; set; } 

, tüm DateTime özellikleri boş izin verilecek şekilde ayarlanır.

<property name="dialect">NHibernate.Dialect.MsSql2008Dialect</property> 

NHibernate bir DateTime içermez şey için çalışıyor: Ben SQL2008 lehçesini kullanmak benim NHibernate yapılandırma dosyası kurulum var. Referans olması açısından, ben alıyorum tam hata var:

> at 
> NHibernate.AdoNet.SqlClientSqlCommandSet.ExecuteNonQuery()</StackTrace><ExceptionString>System.Data.SqlTypes.SqlTypeException: 
> SqlDateTime overflow. Must be between 
> 1/1/1753 12:00:00 AM and 12/31/9999 
> 11:59:59 PM. 

ben SQL Profiler çalıştırırsanız, NHibernate, bu çok uzun bir beyanı oldu (çalıştırmayı dener son komutu görebilirsiniz, bu yüzden kesildi ettik): bir sorgu olarak bu deyimi yürütme

exec sp_executesql N'UPDATE Projects SET Job = @p0, CreatedOn = @p1, .. WHERE (Where Clause), @p0=219221, @p1=NULL 

SQL ince, hiç şikayet etmiyor devam!

Neler oluyor?

cevap

0

Nedenini bilmiyorum, ancak bu here çalışır. Bağlantıdaki örneklerden farklı olarak, benimki DateTime?. Yani neden işe yaramadığını bilmiyorum, ama öyle.

+0

Bir DateTime? DateTime'ın boş olmasına izin verdiği için çalışır. Bir tarih-zamanı null (null DateTime) değilse, 1/1/0001 olan min-değerine eşlenir. –

1

DateTime özellikleriniz büyük olasılıkla DateTime.MinValue (1/1/0001) yerine boştur veya DateTime sütunu için geçerli aralıktaki bir değer olarak ayarlanmıştır.

0

Aynı sorunu yaşadım. İlk başta, sql türümü null'lık bir tarihten null bir tarih aralığına geçirerek düzelttiğimi düşündüm. Ancak, bu bir serap oldu. Kök neden başka bir yeni eklenen tablo üzerinde basamaklı bir güncellemeydi.

Herkes (özellikle MS) daha açıklayıcı hatalar attıysa, bu hızlı bir şekilde çözülmüş olurdu. Cest la vie.