2010-11-18 9 views
5

Attualmente sto usando mappe di componenti in questo modo:Fluent Nhibernate: associazione di una raccolta di componenti (oggetti valore)?

public class UserMapping 
{ 
     public UserMapping() 
     { 
      Id(c => c.Id).GeneratedBy.HiLo("100"); 
      Map(c => c.UserName); 
      Component(c => c.Country, CountryComponentMapping.Map); 
     } 
} 


public sealed class CountryComponentMapping 
{ 
    public static void Map(ComponentPart<Country> part) 
    { 
     part.Map(x => x.CountryName) 
     part.Map(x => x.CountryAlpha2) 
    } 
} 

Mi piace questo becuase Ho solo per definire la mappatura per il Component Object/valore in un unico luogo.

Come utilizzerei la stessa semantica per una raccolta del componente? (ad esempio, supponiamo di voler cambiare questo in una raccolta di paesi sull'entità utente)

+0

componenti fanno parte della controllante, pensano che l'esempio di base nella documentazione Fluente in cui indirizzo è una componente del cliente, ma la tabella si vive come Customer_City, Customer_ZIP ecc –

risposta

7

È possibile mappare questo come una raccolta di componenti. Sfortunatamente non c'è sovraccarico di HasMany(). Component() in Fluent NHibernate che consente di specificare che si desidera utilizzare una classe derivata di ComponentMap. Puoi comunque usare una modifica della tua tecnica sopra.

public sealed class UserMap : ClassMap<User> { 
    public UserMap() { 
     Id(c => c.Id).GeneratedBy.HiLo("100"); 
     Map(x => x.Name); 
     HasMany(x => x.Countries).Component(CountryComponentMapping.Map); 
    } 
} 

public sealed class CountryComponentMapping { 
    public static void Map(CompositeElementBuilder<Country> part) { 
     part.Map(x => x.CountryName); 
     part.Map(x => x.CountryAlpha2) 
    } 
} 
+0

Questa risposta è ormai ben più di 5 anni . Nel frattempo qualcosa è cambiato? – MarioDS

Problemi correlati