0
我正在構建一個應用程序使用NHibernate映射的代碼,並且我無法映射受保護的屬性,當我使用組件映射(相當於hbm複合元素映射)爲值對象的集合。NHibernate:映射在組件(複合元素)映射受保護的成員
我能映射單個值對象的實體和組件映射中的受保護屬性,它僅僅是映射值對象集合時似乎不受支持的受保護屬性。
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);
});
}));
});
}
這是因爲IMinimalPlainPropertyContainerMapper<TContainer>
支持保護遺產,而IComponentElementMapper<TComponent>
沒有。
這是有原因嗎?值對象應該被允許具有僅用於審計目的的保護屬性並且不構成其概念標識的一部分似乎是合理的,並且對於單值對象的組件映射支持保護屬性。