Je crée une application qui utilise le mappage NHibernate par code et je ne parviens pas à mapper des propriétés protégées lorsque j'utilise un mappage de composants (équivalent à l'élément composite hbm mapping) pour une collection d'objets de valeur.NHibernate: mappage des membres protégés dans le mappage de composants (élément composite)
Je suis capable de mapper des propriétés protégées dans des mappages d'entités et de composants pour des objets à valeur unique, seules les propriétés protégées ne semblent pas être prises en charge lors du mappage de collections d'objets de valeur.
public class MyEntity
{
public virtual int Id { get; protected set; }
protected virtual MyValueObject MyValueObject { get; set; }
}
public class MyValueObject
{
protected string SomeString { get; set; }
protected ISet<NestedValueObject> NestedValueObjects { get; set; }
// Constructor, Equals/GetHashcode overrides, etc.
}
public class NestedValueObject
{
public string Name { get; set; }
protected DateTime CreatedOn { get; set; } // Audit only property
// Constructor, Equals/GetHashcode overrides, etc.
}
public MyEntityMap()
{
Table("MyEntityTable");
Id(x => x.Id, map =>
{
map.Column("Id");
});
Component<MyValueObject>("MyValueObject", c =>
{
// Protected property maps correctly
c.Property("SomeString", map =>
{
map.NotNullable(true);
});
c.Set<NestedValueObject>("NestedValueObjects", map =>
{
map.Table("NestedValueObjectsTable");
map.Key(k => k.Column("MyEntityId"));
}, r => r.Component(n =>
{
// Public property maps correctly
n.Property(x => x.Name);
// Compilation fail - there is no method that supports protected properties in component mappings
n.Property<DateTime>("CreatedOn", map =>
{
map.NotNullable(true);
});
}));
});
}
En effet, les propriétés protégées IMinimalPlainPropertyContainerMapper<TContainer>
supports, alors que IComponentElementMapper<TComponent>
ne fonctionne pas.
Y a-t-il une raison à cela? Il semble raisonnable qu'un objet valeur soit autorisé à avoir des propriétés protégées à des fins d'audit uniquement et ne faisant pas partie de son identité conceptuelle, et les propriétés protégées sont prises en charge avec le mappage de composants pour les objets à valeur unique.