2009-09-25 2 views
3

Est-il possible de réutiliser un mappage de composant dans une projection?Réutiliser le composant dans la projection (NHibernate)

Voici le mappage pour l'entité du vendeur:

<class name="Vendor" table="vendor"> 
    ... 
    <property name="Name" column="Name" /> 
    <component name="Address" class="MyProject.Address, MyAssembly" > 
     <property name="Street" column="street" /> 
     <property name="City" column="City" /> 
    </component> 
    </class> 

Pour un rapport que je voudrais récupérer ces fournisseurs dans un objet de transfert de données, mais réutiliser le composant Adresse (car il y a de nombreux domaines et certains utiles comportement de formatage). Est-ce possible sans diviser l'adresse dans sa propre table?

public class VendorDTO 
{ 
    public string Name; 
    public Address Address; 

} 

public class Address 
{ 
    public string Street; 
    public string City; 
    public string SomeUsefulBehavour(); 
} 

Est-ce possible sans diviser l'adresse dans sa propre table?

Merci!

+0

Voulez-vous une question? Que voulez-vous dire par "réutiliser un mappage de composants dans une projection"? Je ne comprends pas la question ... –

+0

Conseils possibles - vous pouvez écrire vos propres ResultTranslators; vous pouvez essayer d'utiliser HQL construct new Address(); Je n'ai pas essayé l'un ou l'autre, donc juste des indices. – Rashack

+0

Oui j'espérais pour une requête similaire à: sélectionnez nouveau VendorDTO (vendor.Name, vendor.Address) du fournisseur fournisseur Merci pour les conseils. –

Répondre

0

Je crois que cela devrait 'travailler juste':

Session.QueryOver<Vendor>() 
    .SelectList(builder => 
     builder.Select(x => x.Name) 
      .Select(x => x.Address)) 
    .TransformUsing(Transformers.AliasToBean<VendorDTO>()) 
    .List<VendorDTO>();