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

Das dazugehörige DTO:

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

2 Responses to “NHibernate – typisierte Liste in ein DTO wandeln”

  1. hfrmobile Says:

    Netter Blog!
    Denke, ich werde mir mal NHibernate mal näher ansehen (müssen) :o)

Leave a Reply