使用NHibernate查询MySql零日期

使用NHibernate查询MySql零日期,mysql,linq-to-nhibernate,Mysql,Linq To Nhibernate,我正在联系一个使用NHibernate的遗留数据库,但是MySql的零日期有问题 该列定义为DATETIME NULL,但它将“NULL”值存储为空白日期。 我已将Convert Zero Datetime=true添加到我的connectionstring中,因此现在所有值都转换为Datetime.MinValue。另一方面NHibernate似乎不理解这一点,并且在查询时不会将DateTime.MinValue转换为空白的MySql DateTime // So this query alw

我正在联系一个使用NHibernate的遗留数据库,但是MySql的零日期有问题

该列定义为
DATETIME NULL
,但它将“NULL”值存储为空白日期。 我已将
Convert Zero Datetime=true
添加到我的connectionstring中,因此现在所有值都转换为
Datetime.MinValue
。另一方面NHibernate似乎不理解这一点,并且在查询时不会将
DateTime.MinValue
转换为空白的MySql DateTime

// So this query always returns a blank result.
Where(x => x.SomeDateTime == DateTime.MinValue)
// And so does this
Where(x => x.SomeDateTime == null)
我曾想过直接为这些字段使用
MySqlDateTime
,但这太难看了,我需要自己在上面实现算法


你知道我如何优雅地处理这个问题吗?

与NULL比较与使用
is NULL
测试不同。数据库实际上并没有在其中放入null值,而是在另一个(隐藏)字段中设置了一个标志


你的误会。数据库中没有空值,是MySql的空日期时间;"0000-00-00 00:00:00". 这就是问题所在。数据是如何写的?如果没有可用于记录的日期时间,是否写入日期0001-01-01?我很确定0000-00-00被转换为空值。在MySql中,零日期值用于“非法”日期。它与空值无关。.Net连接器可以将这些非法日期提取为DateTime.MinValue,因为零日期无法转换为DateTime。问题是当使用它来查询NHibernate时。NHibernate似乎不理解这些非法日期。
Where(x => x.SomeDateTime is null)