Nhibernate 3.0:Future<>的问题和连接表的限制

时间:2011-03-30 11:44:05

标签: c# nhibernate

我无法弄清楚nHibernate的问题。 我的域名非常简单。由于我的大多数数据都显示在分页网格(jqGrid)中,因此我需要使用 Future<> 来获取总行数。 如果我在这里运行这段代码它可以正常工作:

ICriteria FiltersCriteriaCount = session.CreateCriteria<Domain.Reminder>();
ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();

var TotalRecords = FiltersCriteriaCount
    .SetProjection(Projections.RowCount())
    .FutureValue<Int32>();

var sResult = FiltersCriteria
    .CreateAlias("Company", "Company")
    .CreateAlias("PlanType", "PlanType")
    .CreateAlias("OperationsManager", "OperationsManager")
    .CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .SetFirstResult(0)
    .SetMaxResults(100)
    .Future<Domain.Reminder>()
    .ToList<Domain.Reminder>();

但如果我添加限制,我会收到例外could not resolve property: Schedules.Notes of: BpReminders.Domain.Reminder

ICriteria FiltersCriteriaCount = session.CreateCriteria<Domain.Reminder>();
ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();

FiltersCriteriaCount.Add(Restrictions.Eq("Schedules.Notes", ""));
FiltersCriteria.Add(Restrictions.Eq("Schedules.Notes", ""));

var TotalRecords = FiltersCriteriaCount
    .SetProjection(Projections.RowCount())
    .FutureValue<Int32>();

var sResult = FiltersCriteria
    .CreateAlias("Company", "Company")
    .CreateAlias("PlanType", "PlanType")
    .CreateAlias("OperationsManager", "OperationsManager")
    .CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .SetFirstResult(0)
    .SetMaxResults(100)
    .Future<Domain.Reminder>()
    .ToList<Domain.Reminder>();

如果我摆脱未来&lt;&gt;像这样转换我的代码一切正常:

ICriteria FiltersCriteria = session.CreateCriteria<Domain.Reminder>();
FiltersCriteria.Add(Restrictions.Eq("Schedules.Notes", ""));

var sResult = FiltersCriteria
    .CreateAlias("Company", "Company")
    .CreateAlias("PlanType", "PlanType")
    .CreateAlias("OperationsManager", "OperationsManager")
    .CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .SetFirstResult(0)
    .SetMaxResults(100)
    .List<Domain.Reminder>();

我找不到原因。 任何帮助都会非常感激。

1 个答案:

答案 0 :(得分:2)

我会说,试试这个:

var TotalRecords = FiltersCriteriaCount
    .CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .SetProjection(Projections.RowCount())
    .FutureValue<Int32>();