Проекция Linq неправильно кэшируется в NHibernate 3.2

Учитывая простую проекцию, подобную следующей, 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();

Ожидаемое

значение результата1 будет Имя = "Bob" и BadArg = 1

значение результата2 будет Name = "Bob" и BadArg = 2

Фактическое

значение результата1 будет иметь значение Name = "Bob" и BadArg = 1

значение результата2 будет be Name = "Bob" и BadArg = 1

Очевидно, это может вызвать множество безумных поступков, если вы этого не ожидаете. Я видел пару отчетов об ошибках , подобных этому, в отслеживании ошибок NHibernate, но с мая прошлого года никаких действий с ним не предпринималось.Итак, либо никто не использует Linq to Nhibernate очень часто, либо есть обходной путь, о котором я не знаю.

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

Примечание

Этот пример подразумевается Чтобы не усложнять вопрос, на самом деле у меня сложная проекция, которую я хочу сохранить как IQueryable, преждевременное преобразование в IEnumerable не сработает.

Обновление Не работает в мастере github для Nhibernate 3.2.1

6
задан Greg Roberts 6 January 2012 в 00:29
поделиться