NHibernate .Query возвращает устаревшие данные

Это мой модульный тест (это совершенно бессмысленно, но доказывает свою точку зрения

Config entity = new Config("key", "value");

Session.SaveOrUpdate(entity);

Config config = Session.Query<Config>().SingleOrDefault(c => c.Key == "key");
Assert.IsNotNull(config);

он терпит неудачу... но я не думаю, что он должен (обратите внимание, если я его сбрасываю, он не терпит неудачу, но это не то поведение, которое я хочу)

Если я заменю строку запроса на это

Config config = Session.Get<Config>("key");

... это проходит

Ни в коем случае он не сбрасывается (я даже установил FlushMode на never, просто чтобы быть уверенным). Почему один будет успешным, а другой нет? Это не кажется правильным - и я бы очень хотел, чтобы linq был успешным


person Paul    schedule 22.10.2010    source источник


Ответы (1)


Эта статья:

http://ayende.com/Blog/archive/2009/04/30/nhibernate-ndash-the-difference-between-get-load-and-querying-by.aspx

Кажется, предполагается, что Query отправится в базу данных, минуя кеш сеанса, тогда как Get сначала попробует сеанс.

person Greg Fleming    schedule 22.10.2010
comment
Вау, хорошая находка! Если вы используете кэширование запросов (я не уверен, как вы это делаете), означает ли это, что .Query и .Get будут возвращать одно и то же? - person Paul; 22.10.2010