【发布时间】:2012-04-09 14:19:36
【问题描述】:
首先,一个简单的例子来描述我的问题。
型号
public class User
{
public virtual String UserID { get; set; }
public virtual String UserName { get; set; }
public virtual DateTime LastLoginTime { get; set; }
}
映射
<id name="UserID" type="AnsiString">
<column name="p_UserID_vc" length="20"></column>
<generator class="assigned"/>
</id>
<property name="UserName" column="UserName_vc" type="AnsiString">
<property name="LastLoginTime" column="LastLoginTime_d" type="DateTime">
表格
create table T_User
(
p_userid_vc VARCHAR2(20) not null,
username_vc VARCHAR2(50),
lastlogintime_d DATE,
)
现在,该表中有 100 万用户。我在 LastLoginTime 中创建了一个 oracle 索引。我使用这样的查询:
var list = Responsity<User>.Where(q => q.LastLoginTime <= DateTime.Now &&
q.LastLoginTime >= DateTime.Now.AddDays(-7));
我使用 Nhibernate Profile 来监视真正的 sql 字符串:
select t.p_UserID_vc
from T_User t
where t.lastlogintime_d >= TIMESTAMP '2012-03-19 16:58:32.00' /* :p1 */
and t.lastlogintime_d <= TIMESTAMP '2012-03-26 16:58:32.00' /* :p2 */
它没有使用索引。我认为它应该使用 'to_date' ,以便它可以使用索引。如何配置映射文件?
【问题讨论】:
-
您的表定义中没有
LastLoginTime。它是什么类型的?DATE或TIMESTAMP? -
对不起,我已经编辑过了。 LastLoginTime 的 DBType 是 DATE。我认为 Nhibernate 会使用“to_date”而不是“TIMESTAMP”。但它没有。
标签: oracle nhibernate datetime date