NHibernate - MultiCriteria выдает исключение при попытке сделать пейджинговый запрос - PullRequest
1 голос
/ 13 января 2012

Я пытался реализовать метод, который будет создавать все необходимые мне критерии, выполнять и возвращать данные. Вот метод.

        /// <summary>
        /// Fetches a paged collection of entities from the database. Use this method when you only need a certain amount of information.
        /// </summary>
        /// <typeparam name="TType"></typeparam>
        /// <param name="pred"></param>
        /// <param name="pageNumber"></param>
        /// <param name="pageSize"></param>
        /// <param name="totalRecords"></param>
        /// <returns></returns>
        public IEnumerable<TType> FetchPagedCollection<TType>(System.Linq.Expressions.Expression<Func<TType, bool>> pred, int pageNumber, int pageSize, out int totalRecords) where TType : class
        {
            var multiCriteria = this._session.CreateMultiCriteria();

            ICriteria dataCriteria = this._session.CreateCriteria<TType>().Add(this.HandleBinaryExpression<TType>(pred));
            ICriteria countCriteria = CriteriaTransformer.TransformToRowCount(dataCriteria);//Changed this from Clone since it's what I really want...

            dataCriteria.SetMaxResults(pageSize);
            dataCriteria.SetFirstResult((pageNumber - 1) * pageSize);

            //countCriteria.SetProjection(Projections.RowCount());

            multiCriteria.Add<TType>(countCriteria);
            multiCriteria.Add<TType>(dataCriteria);

            IList result = multiCriteria.List(); <--Throws exception here.
            IEnumerable<TType> data = (IEnumerable<TType>)result[0];
            IList counts = (IList)result[1];
            totalRecords = (int)counts[0];

            if (this._ownsTransaction)
                this._transaction.Commit();

            return data;
        }

Такое исключение имеет смысл, но я не уверен, как это исправить. Исключение гласит, что запрос подсчета не может быть выполнен, поскольку возвращаемое значение «0» не относится к типу FavoriteWorker "

Вот фактический текст исключения:

{"Error executing multi criteria : 
[SELECT count(*) as y0_ FROM FavoriteWorkers this_ WHERE this_.UserID = ?p0;\r\n
SELECT this_.FavoriteWorkerID as Favorite1_0_0_, this_.UserID as UserID0_0_ 
FROM FavoriteWorkers this_ WHERE this_.UserID = ?p1 limit ?p2;]"}

InnerException Text

{"The value \"0\" is not of type \"FavoriteWorkerEntity\" 
and cannot be used in this generic collection.\r\nParameter name: value"}

У кого-нибудь есть идеи?

Созданный запрос похож на этот SO-ответ: https://stackoverflow.com/a/433210/385565

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...