2012-07-17 76 views
0

我收到了一些奇怪的行爲NHibernate是如何發送查詢到數據庫DateTimeOffset字段。考慮下面的例子:NHibernate不同的方式創建基於日期的月查詢基於月的日期

DateTimeOffset? myDate = new DateTimeOffset(2012, 3, 17, 0, 0, 0, new TimeSpan(1, 0, 0)); 
var test = HibernateSession.Query<ExampleEntity>().Where(c => c.DateTimeOffsetField > myDate).ToList(); 
DateTimeOffset? myDate2 = new DateTimeOffset(2012, 3, 1, 0, 0, 0, new TimeSpan(1, 0, 0)); 
var test2 = HibernateSession.Query<ExampleEntity>().Where(c => c.DateTimeOffsetField > myDate2).ToList(); 

使用NHibernate Profiler來看看生成的SQL,第一個查詢顯示爲

exampleentity0_.[DateTimeOffsetField] > '17/03/2012 00:00:00 +01:00' /* @p0 */ 

第二個作爲

exampleentity0_.[DateTimeOffsetField] > '2012-01-02T23:00:00.00' /* @p0 */ 

通知不同的格式上日期?如果月份的日期大於12,則使用第一種格式,如果小於12,則使用第二種格式。由於SQL Server無法將字符串轉換爲有效日期,因爲它正在查找17個月(如本例所示),所以當我們有第一種格式的日期時,這會導致錯誤。這讓我瘋狂!

有沒有人見過這種行爲? 是否有可能告訴NHibernate總是使用yyyy-MM-dd格式?

感謝 湯姆

附:使用FluentNHibernate進行映射和配置。映射的一個例子是

Map(a => a.DateTimeOffsetField).Not.Nullable(); 

...即沒有什麼不尋常..

回答

0

我有「固定」這一問題通過更改SQL Server實例使用英國時的文化,這樣是同時接受由NHibernate創建的值...仍然有興趣知道爲什麼會出現這些差異。