Quantcast
Viewing latest article 3
Browse Latest Browse All 7

NHibernate – typisierte Liste in ein DTO wandeln

Wie kann man ganz einfach eine generische Liste in ein “generisches DTO” wandeln? Diese Frage stellten wir uns letztens in der Arbeit. Nach mehreren Codezeilen um die generische Liste (manuell) zu mappen, waren wir der Meinung, dass es doch einfacher zu handhaben sein muss.
Nach einer längeren Recherche sind wir dann auf Transformers.AliasToBean gestoßen. Anbei ein kleines Beispiel für die Anwendung von Transformers.AliasToBean.

So könnte die Klasse “Auflage” aussehen:

Image may be NSFW.
Clik here to view.
image

Das dazugehörige DTO:

Image may be NSFW.
Clik here to view.
image

Da ich Fluent-NHibernate verwende, wird die Klasse wie folgt gemappt:
   1: public class AuflagenMap : ClassMap<Auflage>

   2: {

   3:     public AuflagenMap(){

   4:         Id(x => x.Id);

   5:         Map(x => x.Datum);

   6:         Map(x => x.Anzahl);

   7:     }

   8: }


Mit Projections.Sum(“Anzahl”).As(“Auflage”) wird bestimmt wohin gemappt werden soll. “Anzahl” kommt aus “Auflage” und wird per Alias (“.As”) in das Property “Auflage gemappt. Das gleiche gilt natürlich auch für die Gruppierung nach Datum.

   1: public IEnumerable<AuflageDto> AuflagenSummierung(){    

   2:     var criteria = m_Session.CreateCriteria(typeof (Auflage))

   3:         .SetProjection(Projections.ProjectionList()

   4:             .Add(Projections.Sum("Anzahl").As("Auflage"))

   5:             .Add(Projections.GroupProperty("Datum").As("Datum")))

   6:         .AddOrder(Order.Asc("Datum"))

   7:         .SetResultTransformer(Transformers.AliasToBean(typeof (AuflageDto)))

   8:         .List<AuflageDto>();

   9:     return criteria;

  10: }

Das Ergebnis sieht dann so aus:

Image may be NSFW.
Clik here to view.
image


Viewing latest article 3
Browse Latest Browse All 7