Ist es möglich, dass nhibernate eine Abfrage als IDictionary anstelle einer Entitätsklasse zurückgibt?

8

Ich habe eine Entität Person:

%Vor%

mit den Zuordnungen:

%Vor%

Es gibt einige Studien, in denen ich möchte, dass Nhibernate anstelle der Entität ein Wörterbuch zurückgibt:

%Vor%

Ist dies möglich, ohne ein anderes Mapping hinzuzufügen?

    
wusher 03.09.2010, 17:48
quelle

6 Antworten

12

Sie müssen Ihre eigene ResultTransformer-Implementierung definieren, damit dies so funktioniert, wie Sie es benötigen. Unten finden Sie eine Referenzimplementierung, die Sie nach Bedarf anpassen können. Es gibt einen kompletten Mangel an Fehlerprüfung usw .; also mit Vorsicht verwenden;)

%Vor%     
DanP 07.09.2010, 19:00
quelle
2
%Vor%

so etwas?

    
Wayne 06.09.2010 07:05
quelle
2

Sie brauchen nicht das DictionaryResultTransformer , das von DanP gepostet wurde. AliasToEntityMapTransformer macht dasselbe, aber auch nicht wird eigenständig arbeiten. Sie erhalten ein Wörterbuch von Entitäten.

Der einzige Weg, den ich gefunden habe, ist, jede Eigenschaft einzeln zu projizieren. Allerdings möchten Sie das nicht von Hand machen, da es bei jeder Änderung Ihres Mappings bricht. Die Lösung ist etwa so:

%Vor%

Im obigen Beispiel verwende ich eine Abfrage, um Get zu simulieren. Natürlich können Sie dies etwas ändern und stattdessen eine Sammlung zurückgeben; Rufen Sie einfach List<T> anstelle von UniqueResult<T> auf.

    
Tim Scott 07.11.2011 17:13
quelle
1

Nein, aber Sie können dies leicht erreichen, indem Sie die Logik in eine Repository-Methode einkapseln.

%Vor%

Sie können auch Reflektion verwenden, um das Wörterbuch zu füllen.

    
Jamie Ide 05.09.2010 12:58
quelle
0

Sehen Sie sich diesen Blogbeitrag an:

Ссылка

Wenn Sie ein konkretes Beispiel möchten, überprüfen Sie die Beispiele dieses netten Tutorials. Sehen Sie sich die Zusammenfassungen an, die keine Entitäten sind und eine benutzerdefinierte Zuordnungslogik haben:

Ссылка

Oder führen Sie eine Google-Suche nach SetResultTransformer durch, die nur für diese Zwecke verfügbar ist, und die Ergebnisse in andere Objekte oder Sammlungen transformiert. Einschließlich IDictionary.

    
user333306 03.09.2010 18:19
quelle
0

Sie können dies tun, indem Sie eine clientseitige linq-Projektion durchführen, siehe Diegos Antwort auf diesen Beitrag .

    
DanP 07.09.2010 17:37
quelle

Tags und Links