QueryOver: Spalten aus der Unterabfrage auswählen
Wie kann ich Werte aus einer Unterabfrage aus einer anderen Tabelle in meine Hauptabfrage auswählen / projizieren?
Ich habe ein NH-Modell wie dieses:
[Serializable]
public class MyModel
{
public virtual int Id {get; set;}
//more mapped values
....
//unmapped values
public virtual string ValueFromOtherTable {get;set;}
}
Und ich möchte ValueFromOtherTable mit einer linken Verknüpfung wie dieser füllen:
Select mt.*, ..., ot.ValueFromOtherTable from MyModelTable mt left
join OtherTable ot ON (somecondition)
where MyModelTable ist die Tabelle, die der MyModel-Klasse zugeordnet ist. Ich möchte ValueFromOtherTable füllen (keine NH-Zuordnung), indem ich alle Werte aus mt auswähle (um die NH-zugeordneten Spalten zu füllen) und dann mit OtherTable ValueFromOtherTable füllen möchte.
Ich kann nicht beide Tabellen über @ verbindQueryOver
da es im Modell keine direkte Eltern-Kind-Korrelation gibt,JoinAlias
oderJoinQueryOver
wird nicht funktionieren. MeinMainQueryOver
AbfragenMyModelTable
.
ALTERNATIVE
Die Alternative besteht darin, zuerst alle Werte aus MyModelTable abzurufen und dann mithilfe der dortigen Eigenschaften OtherTable abzufragen. Dies führt jedoch zu einemSELECT N+1
Problem (für jedes Modell vonMyModel
wähle eine andere Tabelle aus ...) und mache den Code auch sehr kompliziert.
Gibt es eine gute Möglichkeit, dieses Problem zu lösen, oder ist es die einzige Möglichkeit, MyModel mithilfe der beschriebenen Alternative zu füllen?