2010-06-01 5 views
2

J'ai une simple requête LINQ NHiberntate:NHibernate.Linq: Session devient sale après sélection

var queryable = session.Linq<Product>().Where(p => p.Active); 
Product[] products = queryable.ToArray(); 

Au moment où le ToArray() est exécuté la session devient sale (session.IsDirty() retours true). Si la transaction est validée, une requête SQL UPDATE est générée pour chaque produit.

Pourquoi les produits sont-ils marqués comme sales après un simple SELECT SQL?

Dans ce projet, nous utilisons le cadre folowing/outils:

  • .Net 3.5 + WPF
  • NHibernate 2.1.2 + FluentNHibernate
  • SQLite
  • PostSharp 1,5
+0

Ce n'est pas un problème de LINQ, mais un problème de cartographie. Publiez votre schéma de mappage, entité et schéma de base de données associé. – Paco

Répondre

3

ce problème est appelé "Ghost"

ce test détecte ce genre de problèmes: http://fabiomaulo.blogspot.com/2008/10/how-test-your-mappings-ghostbuster.html

c'est mon amélioration, est un peu plus bavard, et donc il vous donnera plus d'informations: http://jfromaniello.blogspot.com/2010/02/nhibernate-ghostbuster-version-11.html

+0

Merci beaucoup, c'était tout. J'ai utilisé un script SQL simple pour initialiser les données et certaines colonnes mappées vers les propriétés int où initialisé à NULL. Votre test réussi, je pense que c'est parce qu'il ne teste que la première entité de chaque type. –

Questions connexes