2010-07-07 6 views
1

Lorsque j'essaie d'exécuter ce morceau de logique, NHibernate revient avec une erreur indiquant qu'il n'a aucune référence à "Site".Imbrication d'une requête Linq avec NHibernate

IQueryable<Product> query = this.RetrieveAll();  
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.Site.ID == siteID).Count() > 0); 

Un petit arrière-plan. produit a un à plusieurs carte à SiteProduct SiteProduct a un à plusieurs Carte au site

Même une version plus simple a des problèmes, il déclare qu'il n'a pas de référence à ID:

IQueryable<Product> query = this.RetrieveAll();  
query = query.Where(x => x.Status == Product.Statuses.Approved || x.SiteProduct.Where(y => y.ID > 0).Count() > 0); 

Est-ce que NHibernate ont des problèmes avec l'imbrication "Où" des déclarations en lui-même? En ce qui concerne les mappages de table, ils semblent être corrects puisque je peux transversalement descendre et capturer des enregistrements individuels en bas par chargement paresseux. L'ajout, l'obtention et la suppression d'enregistrements fonctionnent parfaitement. J'ai juste des problèmes avec l'imbrication de ma requête Linq.

+0

Quelle version de NHibernate utilisez-vous? –

+0

Version 2.1.2.4000 –

Répondre

3

Cela aurait été beaucoup plus facile si quelqu'un avait une réponse pour moi à ce sujet.

Ce que j'ai appris par essais et erreurs ...

Apparemment par le chargement paresseux, il ne retournerait pas et le chargement des tables connexes je référencement. Cela causait une erreur nulle et ne me donnait aucune référence à l'erreur "Site".

Lorsque j'ai changé le chargement du chargement paresseux au chargement hâtif, l'erreur est partie. Donc, la morale de cette histoire est que si la référence à une table où vous essayez d'utiliser votre instruction where imbriquée est nulle, vous obtiendrez cette erreur.