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();
...即沒有什麼不尋常..