2009-10-01 5 views
13

Possiedo un'entità "Utente" che contiene un oggetto valore "Indirizzo". Ho questa mappatura ok usando il concetto di componente FNH. Tuttavia, l'indirizzo VO contiene anche un Paese che è un altro oggetto valore. Avevo pensato che questo dovesse essere solo annidato come un altro componente, ma questo non sembra funzionare. Qualcuno può dirmi come dovrei risolvere questo?Associazione di componenti nidificati in Fluent NHibernate

Il codice per la mappatura è sotto ...

Grazie!

public UserMapping() 
     { 
      Table("Users"); 
      Id(c => c.Id).GeneratedBy.HiLo("100"); 
      Map(c => c.UserName).Not.Nullable().Length(64); 
      Map(c => c.Email).Not.Nullable().Length(128); 
      Map(c => c.Password).Not.Nullable().Length(256); 
      Map(c => c.Roles).Length(64); 
      Map(c => c.FirstName).Not.Nullable().Length(64); 
      Map(c => c.LastName).Not.Nullable().Length(64); 
      Map(c => c.BirthDate).Not.Nullable(); 
      //Address 
      Component(x => x.Address, m => 
      { 
       m.Map(x => x.AddressLine1).Not.Nullable(); 
       m.Map(x => x.AddressLine2); 
       m.Map(x => x.City).Not.Nullable(); 
       m.Map(x => x.Region); 
       m.Map(x => x.PostalCode).Not.Nullable(); 
       //*****Country Here******** 
       // country has Name and Code 

      }); 
     } 

risposta

13

Ah, Jimmy Bogard della mailing list FNH mi ha mostrato - è piuttosto semplice. Non so cosa stavo facendo prima! Ad ogni modo, per chiunque sia interessato:

Component(c => c.Address, m => 
{ 
    m.Component(cp => cp.Country, m2 => 
    { 
     m2.Map(x => x.Name); //etc 
    } 
+1

Incredibile. Non avevo capito che potevi annidarli in questo modo. Ho lavorato su questo per una settimana. –

+0

Cosa succede se ho IdCountry in Indirizzo per paese anziché Nome e Codice (a condizione che IdCountry sia la chiave principale del Paese)? – Apocatastasis

0

Vorrei creare una mappa per Country e utilizzare m.References(x => x.Country).

+3

Ma allora non sarebbe trattare il paese come un'entità piuttosto che un oggetto di valore? Forse non c'è niente di negativo nel farlo. – UpTheCreek

+2

C'è un lato negativo. Le entità hanno la loro "vita" (ciò che influenza tutte le selezioni e le query di aggiornamento) e non vogliamo che qui ci sia un 'indirizzo' che vive da solo. – NOtherDev