Domanda

I normalmente interfacce query utilizzando DetachedCriteria in NHibernate:

DetachedCriteria crit = DetachedCriteria.For<IParent>();

E questo funziona bene.

Ora voglio creare una sottoquery per un oggetto figlio così:

DetachedCriteria subcrit = DetachedCriteria.For<IChild>();

e aggiungerlo ai criteri come questo (tipo di, p.Child è in realtà uno pseudonimo ma ho semplificato) :

crit.Add(LambdaSubquery.Property<IParent>(p => p.Child.ChildID).In(subcrit));

Questo funziona se il mio DetchedCriteria per un bambino:

DetachedCriteria subcrit = DetachedCriteria.For<Child>();

, ma non è che sia per l'interfaccia (come sopra). In quel caso ottengo un'eccezione:

NHibernate.MappingException: No persister for: Domain.Name.Space.IChild

E 'questo qualcosa che è destinata ad essere o mi sto perdendo un po' di config?

È stato utile?

Soluzione

Non credo che si sarebbe in grado di query l'interfaccia in questo caso perché NHibernate non sarebbe in grado di trovare la classe che implementa destra si sta intendevate query. Ad esempio, supponiamo di avere un altro realizzatore del IChild chiamato ChildLight (o qualcosa che è associata a una tabella diversa), NHibernate ha una direzione per la quale attuazione di classe per recuperare.

È necessario creare un DetachedCriteria.For (), piuttosto che l'interfaccia.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top