2010-11-18 7 views
5

actualmente estoy usando mapas de componentes así:Fluent Nhibernate - mapeo de una colección de componentes (objetos de valor)?

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) 
    } 
} 

Me gusta este becuase sólo tengo que definir la asignación para el objeto componente/valor en un solo lugar.

¿Cómo podría utilizar la misma semántica para una colección del componente? (por ejemplo, supongamos que queremos cambiar esto a una colección de países en la entidad de usuario)

+0

Los componentes son parte de la entidad matriz, piensan que el ejemplo básico en la documentación Fluido donde dirección es un componente de cliente, pero la mesa se vive como Customer_City, Customer_ZIP etc –

Respuesta

7

Puede asignar esto como una Colección de componentes. Desafortunadamente, no hay sobrecarga en HasMany(). Component() en Fluent NHibernate que le permite especificar que desea usar una clase derivada de ComponentMap. Sin embargo, puedes usar una modificación de tu técnica más arriba.

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

Esta respuesta es ahora también más de 5 años de edad . ¿Ha cambiado algo mientras tanto? – MarioDS

Cuestiones relacionadas