Я думаю, что проблема здесь состоит в том, что профиль параметра Вашего new не соответствует профилю стандартного нового оператора, так, чтобы каждый не становился скрытым (и таким образом все еще используется).
Ваши профили параметра для нового и удаляют потребность быть похожими на это:
void* operator new(size_t);
void operator delete(void*, size_t);
Вы также можете воспользоваться функцией Futures в NHibernate для выполнения запроса, чтобы получить общее количество записей, а также фактические результаты в одном запросе.
Пример
// Get the total row count in the database.
var rowCount = this.Session.CreateCriteria(typeof(EventLogEntry))
.Add(Expression.Between("Timestamp", startDate, endDate))
.SetProjection(Projections.RowCount()).FutureValue<Int32>();
// Get the actual log entries, respecting the paging.
var results = this.Session.CreateCriteria(typeof(EventLogEntry))
.Add(Expression.Between("Timestamp", startDate, endDate))
.SetFirstResult(pageIndex * pageSize)
.SetMaxResults(pageSize)
.Future<EventLogEntry>();
Чтобы Чтобы получить общее количество записей, выполните следующие действия:
int iRowCount = rowCount.Value;
Хорошее обсуждение того, что вам дают Futures, можно найти здесь .