Ich erstelle eine Anwendung, die NHibernate-Mapping nach Code verwendet, und kann keine geschützten Eigenschaften zuordnen, wenn ich eine Komponentenzuordnung verwende (entspricht hbm Composite-Element) Mapping) für eine Sammlung von Wertobjekten.NHibernate: Zuordnen von geschützten Elementen in der Zuordnung von Komponenten (Verbundelementen)
Ich bin in der Lage, geschützte Eigenschaften in Entity und Compoment Mappings für einzelne Wertobjekte abzubilden, es ist nur geschützte Eigenschaften werden nicht unterstützt beim Mapping Sammlungen von Wertobjekte.
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);
});
}));
});
}
Dies liegt daran, IMinimalPlainPropertyContainerMapper<TContainer>
unterstützt Eigenschaften geschützt, während IComponentElementMapper<TComponent>
nicht.
Gibt es einen Grund dafür? Es erscheint sinnvoll, dass ein Wertobjekt geschützte Eigenschaften haben darf, die nur zu Prüfzwecken dienen und nicht Teil ihrer konzeptionellen Identität sind, und geschützte Eigenschaften werden mit der Komponentenzuordnung für Einzelwertobjekte unterstützt.