2008-12-19 6 views
1

J'ai une erreur plutôt étrange avec NHibernate. Je faisais erreur avec ISession été partagé par des fils à travers et a obtenu cette résolu en fournissant ma propre connexion ADO.NET comme:NHibernate collections non persistantes

  IDbConnection connection = new SqlConnection(ApplicationConfiguration.ConnectionString); 
      connection.Open(); 

      ISession session = _sessionFactory.OpenSession(connection); 
      session.FlushMode = FlushMode.Commit; 

      return session; 

Mon application fonctionne maintenant, mais tous les objets avec des collections sont été persista dans la base de données sans leur collections. Par exemple, disons qu'une voiture a une liste de pneus. Ensuite, je crée une voiture et ensuite générer une liste de pneus basés sur des pneus déjà dans la base de données. sauver l'objet de voiture sauvera seulement la voiture pas la liste!

de l'aide sur ce que je fais mal? J'utilise NHibernate 2.0 et j'appelle Session.Flush() et Transaction.Commit().

acclame.

+0

Comment cartographiez-vous les pneus à la voiture? – lomaxx

Répondre

2

Vérifiez l'attribut de cascade sur votre mappage de collection - par défaut, il est défini sur 'none', ce qui signifie que les entités enfants doivent être explicitement sauvegardées. Vous voulez probablement cascade = "all" ou cascade = "all-delete-orphelin".

+0

J'avais un problème similaire et cascade = "tout" a fait l'affaire pour moi – tjjjohnson

0

utilisez-vous NHibernate.ISession.save (objet) avant le flush et validation de la liste des pneus?

3

salut J'ai trouvé la raison pour laquelle les collections n'ont pas été conservées. mon unité de travail invoquait une propriété qui renvoyait un objet Isession pour persister dans mes objets. Cependant, cette propriété a renvoyé une nouvelle ISession pour chaque appel. COnce j'ai corrigé ceci pour utiliser la même ISession dans chaque unité de travail, les objets ont été persistés correctement. Merci pour votre aide.

Questions connexes