Todas mis entidades y objetos de valor implementan las interfaces de marcador IEntity
y IValueObject
. Los he creado para ser tratados como componentes de este modo:¿Cómo se puede automatizar una colección de componentes con Fluiber NHibernate?
public override bool IsComponent(Type type)
{
return typeof(IValueObject).IsAssignableFrom(type);
}
public override bool ShouldMap(Type type)
{
return typeof(IEntity).IsAssignableFrom(type) || typeof(IValueObject).IsAssignableFrom(type);
}
Desafortunadamente, esto no parece permitir a las entidades que tienen colecciones de objetos de valor que se automapped como colecciones de componentes. Por ejemplo:
public class MyEntity : IEntity
{
public IList<MyValueObject> Objects { get; set; }
}
public class MyValueObject : IValueObject
{
public string Name { get; set; }
public string Value { get; set; }
}
¿Hay alguna manera de definir una convención de tal manera que, cada vez que un IEntity
tiene una IList
de un tipo que implementa IValueObject
, que se asigna como si hubiera especificado:
HasMany(x => x.Objects)
.Component(x => {
x.Map(m => m.Name);
x.Map(m => m.Value);
});
Lo que no quiero hacer es tener que hacer estas anulaciones manualmente para cada clase y escribir cada propiedad para el objeto de valor una y otra vez.