Tutte le entità e gli oggetti valore implementano le interfacce marker IEntity
e IValueObject
. Li ho impostato per essere trattati come componenti in questo modo:Come automatizzare una raccolta di componenti con Fluent 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);
}
Purtroppo, questo non sembra per consentire alle imprese che dispongono di collezioni di oggetti di valore da automapped come le collezioni dei componenti. Ad esempio:
public class MyEntity : IEntity
{
public IList<MyValueObject> Objects { get; set; }
}
public class MyValueObject : IValueObject
{
public string Name { get; set; }
public string Value { get; set; }
}
Esiste un modo per definire una convenzione tale che, ogni volta che un IEntity
ha un IList
di un tipo che implementa IValueObject
, esso viene mappato come se fossi specificato:
HasMany(x => x.Objects)
.Component(x => {
x.Map(m => m.Name);
x.Map(m => m.Value);
});
Quello che non voglio fare è di avere a che fare manualmente queste sostituzioni per ogni classe e scrivere ogni proprietà per l'oggetto valore di nuovo e di nuovo.