C#NHibernate简单问题

时间:2011-03-21 20:46:28

标签: c# nhibernate fluent-nhibernate

我正在使用NHibernate驱动的存储库,Fluent映射并尝试使用Linq to NHibernate

但对于像这样的简单查询

Retrieve<XValue>(x => (x.Timestamp.CompareTo(start) >= 0 &&
                       x.Timestamp.CompareTo(end) <= 0 ));

// 'Retrieve' here acts simply as 'session.Query<T>().Where(expression);'

我得到以下结果:

System.NotSupportedException: Int32 CompareTo(System.DateTime)

我不知道为什么,但是CompareTo操作没有投射到数据库,输出也有点奇怪:

create table "QuotUnitDescriptor" (
    Id  integer,
   PaperId INTEGER,
   Timestamp DATETIME,
   InPaperIdx INTEGER,
   primary key (Id)
)

NHibernate: INSERT INTO "QuotUnitDescriptor" ......................

// Many INSERT's

NHibernate: select cast(count(*) as INTEGER) as col_0_0_ 
    from "QuotUnitDescriptor" binaryunit0_

我无法理解为什么此操作会调用select -> integer操作。

如何实现以下面向日期的查询? (使用Linq更好,但我认为标准也很好。)

1 个答案:

答案 0 :(得分:5)

NHibernate.Linq提供程序无法将CompareTo调用转换为sql。

使用类似:

Retrieve<XValue>(x => x.Timestamp>start && x.Timestamp<end);

P.S。并避免存储库。这是一个天真的抽象。