Disons que j'ai la structure suivante, mappé avec un discriminateur (tableau par hiérarchie):NHibernate Linq requête de recherche Où (x => x est la classe de base) ne soit pas dérivés objets
Entity (abstract, no discriminator)
|
Animal (abstract, no discriminator)
/ \
Dog (1) Cat(2)
Si je fais une recherche sur ce en utilisant Linq à NHibernate:
.Where(x => x.Entity is Animal)
Je n'obtiens aucun résultat. Lorsque l'on regarde à la requête générée je me attendais à voir:
where type in (1, 2)
Mais au lieu que je suis ceci:
where type='animal'
animal est abstrait et n'a même pas un discriminateur, de sorte que la requête générée est dénuée de sens. Creuser un peu plus profond J'ai trouvé que la requête est traduite en interne à quelque chose de similaire à WHERE x.class=animal
dans HQL. Est-ce un bug dans Linq à NHibernate? Ou est-ce un comportement attendu?
Si je fais 'session.Query .ToList()' Je reçois la requête attendue, 'taper dans (1,2)'. Si je fais les questions dans votre réponse, je pense que cela fonctionne aussi. Le problème est seulement avec '.Where (x => x.Entity est Animal)'. Je pourrais faire .Where (x => session.Query () .Sélectionner (a => a.Id) .Contains (x.Entity.Id)), mais au lieu d'un simple 'où type (1,2) 'Je reçois une sous-requête complexe' where id in (sélectionnez id from ...) '. –
AlexDev