2010-10-22 9 views
2

Ceci est mon test unitaire (il est tout à fait dénuée de sens, mais prouve un pointNHibernate .query retour des données périmées

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

Session.SaveOrUpdate(entity); 

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

échoue ... mais je ne pense pas qu'il devrait (note, si je chasse d'eau, il ne manque pas, mais ce n'est pas le comportement que je veux)

Si je remplace la ligne de requête avec cette

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

... il passe

À aucun moment il ne vole (je mets même le FlushMode à jamais juste pour être sûr). Pourquoi l'un réussirait-il, et l'autre non? Cela ne semble pas juste - et je ressemble beaucoup à celui de LINQ pour réussir

Répondre

4

Cet article:

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

semble suggérer qu'une requête sera à la base de données, sans passer de la session cache, alors que Get va d'abord essayer la session.

+0

Wow, bonne trouvaille! Si vous utilisez la mise en cache de requêtes (je ne suis pas sûr de la façon dont vous faites cela) cela signifie-t-il que .Query et .Get renverraient la même chose? – Paul