Учитывая простую проекцию, подобную приведенной ниже, NHibernate будет кэшировать план запроса и не обновлять значение переменной, когда запрос такой же:
int argValue = 1;
var result1 = database.Users.Select(x => new {x.Name, BadArg = argValue}).First();
argValue = 2;
var result2 = database.Users.Select(x => new {x.Name, BadArg = argValue}).First();
Ожидается
значение result1 будет равно Name = "Bob" и BadArg = 1
значение result2 будет равно Name = "Bob" и BadArg = 2
Actual
значение result1 будет равно Name = "Bob" и BadArg = 1
значение result2 будет равно Name = "Bob" и BadArg = 1
Очевидноэто может вызвать много сумасшедшего поведения, если вы этого не ожидаете.Я видел пару сообщений об ошибках , похожих на это в отслеживании ошибок NHibernate, но с мая этого года не было никаких действий над ним.Таким образом, либо никто не использует Linq для Nhibernate слишком много, либо есть какой-то обходной путь, о котором я не знаю.
Прежде чем копаться в источнике NHibernate, есть способ отключить кэширование плана запросов, чтобы предотвратить это поведениеили какой-то другой обходной путь, или кто-нибудь применил патч по вышеуказанной ссылке?
Примечание
Этот пример предназначен для упрощения вопроса, на самом деле у меня сложный вопрос.проекция, которую я хочу сохранить как IQueryable, преждевременное преобразование в IEnumerable не будет работать.
Обновление Не работает в мастере github для Nhibernate 3.2.1