首先,描述我的問題的一個簡單示例。使用Nhibernate將Oracle日期映射到日期時間3.2
型號
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,
)
現在,有在這個表中的一個億的用戶。我在LastLoginTime中創建一個oracle索引。我用這樣的查詢:
var list = Responsity<User>.Where(q => q.LastLoginTime <= DateTime.Now &&
q.LastLoginTime >= DateTime.Now.AddDays(-7));
我使用NHibernate的個人資料WATCHOUT真正的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'? – 2012-03-26 04:33:36
對不起,我編輯過。 LastLoginTime的DBType是DATE.I認爲Nhibernate會使用'to_date'而不是'TIMESTAMP',但它沒有。 – 2012-03-26 05:56:06