У меня есть запрос QueryOver, в котором я получаю несколько строк по списку идентификаторов, где идентификатор - это сложный первичный ключ, состоящий из двух значений. Это приводит к тому, что в базу данных отправляется слишком много параметров, и я получаю сообщение об ошибке.
Запрос состоит из трех частей, например:
var disjunction = Restrictions.Disjunction();
foreach (var id in MyIds) //currently: MyIds.Take(350)
{
disjunction.Add(Restrictions.Where<MyEntity>(x => x.ID == id)); // ID is object with 2 properties
}
var query = session.QueryOver<MyEntity> // first query "branch"
.Left.JoinAlias(...)
.Where(disjunction)
.Future();
session.QueryOver<MyEntity> // second query "branch"
.Left.JoinAlias(...)
.Where(disjunction)
.Future();
session.QueryOver<MyEntity> // third query "branch"
.Left.JoinAlias(...)
.Where(disjunction)
.Future();
return query.ToList();
Поскольку у меня три части, а ключ состоит из из двух свойств я получаю 3 * 2 * MyIds.Count()
параметров. Итак, чтобы избежать превышения 2100 параметров, мне нужно было бы ограничить количество передаваемых параметров (отсюда .Take(350)
), что далеко от идеала - мне нужны все они, а не только некоторые.
Есть ли способ каким-то образом передать эту disjunction
как одну настраиваемую строку SQL, сделав ее единственным параметром? Или, может быть, какой-нибудь другой способ обойти это?
Мне не разрешено изменять количество принимаемых базой данных параметров, и я не думаю, что это будет отличной идеей.
Я рассматривается SQL инъекция, и здесь это не проблема, поскольку пользователь не вводит данные.