NHibernate IQuery.List Ошибка "Неверный индекс 4 для этой коллекции SqlParameterCollection с счетчиком = 4." - PullRequest
0 голосов
/ 15 января 2009

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

Это фрагмент кода:

string hql = " from LabRequest r where 1 = 1 ";
hql += " and 0 < (select count(rs) ";
hql += "            from r.Statuses rs ";
hql += "           where rs.StatusType.Description IN ('Assigned','Submitted')";
hql += "         ) ";
//Session.Clear();          
IQuery query = Session.CreateQuery(hql);
IQueryable<LabRequest> requests = query.List<LabRequest>().AsQueryable<LabRequest>();

Это функция (или большая ее часть) в моем объекте доступа к данным в приложении MVC, над которым я работаю. Это для страницы поиска, и когда страница запускается, эта функция вызывается точно так же, как вы видите в коде, и работает.

Затем, не меняя ничего, я обновляю страницу, которая проходит те же шаги и снова вызывает этот код, в точности так, как вы его видите. Но во второй раз через него происходит сбой в части query.List () последней строки с ошибкой в ​​теме.

Сессия определена в другом DAO как:

session = NHibernateHelper.GetCurrentSession();

Я знаю, что это трудно анализировать без фактической базы данных, но я просто хотел посмотреть, сможет ли кто-нибудь указать мне правильное направление или указать на что-то очевидное в NHibernate, поскольку я в основном ничего не знаю об этом.

Редактировать: забыл упомянуть, что когда я раскомментирую Session.Clear (), он работает нормально, поэтому подумал, что ответ как-то связан с этим, и если это так, как я должен обрабатывать, когда очищать ()?

Редактировать 2: Это часть ответа, но я вызываю очень похожую функцию перед этим во второй раз. То, что я не могу понять, - то, почему тот влияет на тот, который я отправил. Переменная 'query' является локальной, поэтому, похоже, что-то с Session.CreateQuery. Кто-нибудь знает, что это будет?

Спасибо, Джефф

Ответы [ 2 ]

0 голосов
/ 15 января 2009

Относительно ваших заметок «Редактировать 1» и «Редактировать 2», да, это связано с общим сеансом (предполагается, что вы используете один из стандартных методов обработки сеансов в NHibernate).

Есть ли веская причина для использования Session.Clear ()? Как правило, Clear используется только после сброса, чтобы убедиться, что кэш сеанса не становится слишком большим, что приводит к снижению производительности. Вы используете его таким образом или по какой-либо деловой причине, не упомянутой в вашем вопросе?

0 голосов
/ 15 января 2009

Хотя я не уверен, почему именно свойство «Статистика» в сеансе содержит данные из первого запроса, и я думаю, что именно это вызывает ошибку, потому что, если я выполняю сеанс. Очистить, он удаляет коллекции. в свойстве Статистика.

Как мое текущее и, возможно, временное исправление, я только что создал метод расширения для функции CreateQuery, который принимает логический запрос, запрашивающий, очищать ли сеанс, и просто использую его вместо предоставленного.

Если у кого-то еще есть реальный ответ на этот вопрос, пожалуйста, добавьте его.

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