Nhibernate 3.0: проблемы с Future <> и ограничениями в таблице соединений - PullRequest
0 голосов
/ 30 марта 2011

Не могу понять, в чем проблема с 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>();

Если я избавлюсь от Future <> и трансформирую свой код, то все будет нормально:

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 Ответ

2 голосов
/ 30 марта 2011

Я бы сказал, попробуйте это:

var TotalRecords = FiltersCriteriaCount
    .CreateAlias("Schedules", "Schedules", NHibernate.SqlCommand.JoinType.LeftOuterJoin)
    .SetProjection(Projections.RowCount())
    .FutureValue<Int32>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...