Frage

ich normalerweise Abfrage Schnittstellen DetachedCriteria in NHibernate:

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

Und das funktioniert gut.

Ich möchte jetzt eine Unterabfrage für ein Kind-Objekt erstellen so:

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

und fügen Sie es wie folgt auf die Kriterien (Art, p.Child ist eigentlich ein Alias, aber ich habe vereinfacht) :

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

Dies funktioniert, wenn mein DetchedCriteria für ein Kind ist:

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

aber nicht, es ist für die Schnittstelle (wie oben). In diesem Fall erhalte ich eine Ausnahme:

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

Ist das etwas, das sein, oder bin gemeint fehle ich eine Config?

War es hilfreich?

Lösung

Ich glaube nicht, dass Sie in diesem Fall zu Abfrage für die Schnittstelle in der Lage sein würden, weil NHibernate nicht in der Lage sein, die richtige implementierenden Klasse zu finden, die Sie Abfrage vorgesehen sind. Zum Beispiel: Angenommen, Sie eine andere Implementierer von IChild ChildLight haben genannt (oder etwas, das zu einer anderen Tabelle abgebildet wird), hat NHibernate keine Richtung für die implementierende Klasse abzurufen.

Sie benötigen ein DetachedCriteria.For erstellen (), anstatt die Schnittstelle.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top