我无法弄清楚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>();
我找不到原因。 任何帮助都会非常感激。
答案 0 :(得分:2)
我会说,试试这个:
var TotalRecords = FiltersCriteriaCount
.CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
.SetProjection(Projections.RowCount())
.FutureValue<Int32>();