Критерии использования NHibernate для Count (), First () - PullRequest
5 голосов
/ 19 марта 2010

У меня есть вопрос о методе Критерии, отношение один-ко-многим к базе данных, «один» - это « account », «многие» - это « sites » Я использую CreateCriteria() что-то не так.

Как это: SessionFactory.OpenSession().CreateCriteria(typeof(Account)).List().Count();

Перед запуском я думаю, что SQL должен быть SELECT COUNT(*) FROM table, но SQL это SELECT id, siteurl...FROM table. Так что с этим не так? Как я могу решить это?

И First() метод должен быть SELECT TOP1 ...FROM table, но это SELECT ...FROM table

Я новобранец Ниберат, пожалуйста, помогите мне.

1 Ответ

12 голосов
/ 19 марта 2010

Это происходит потому, что метод Count, который вы вызываете в конце, выполняется после выполнения запроса и вне базы данных. Вы только подсчитываете элементы в списке в памяти. Для достижения того, что вы ищете, вы можете использовать проекцию:

var count = session
    .CreateCriteria<Account>()
    .SetProjection(
        Projections.Count(Projections.Id())
    )
    .UniqueResult<long>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...