2012-07-17 49 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创建的值...仍然有兴趣知道为什么会出现这些差异。