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:
Das dazugehörige DTO:
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: }
Oktober 1st, 2009 at 09:33
Netter Blog!
Denke, ich werde mir mal NHibernate mal näher ansehen (müssen) :o)