2010-10-22 1 views
2

Это мой модульного тестирования (это довольно бессмысленно, но доказывает точку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, чтобы никогда не быть уверенным). Зачем быть успешным, а другой нет? Это не кажется правильным - и я бы очень похож на LinQ один, чтобы быть успешным

ответ

4

В этой статье:

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

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

+0

Wow, good find! Если вы используете кеширование запросов (я не уверен, как вы это делаете), значит ли это .Query и .Get вернули бы то же самое? – Paul