NHibernate中的受保护和/或内部组件属性

NHibernate中的受保护和/或内部组件属性,nhibernate,components,Nhibernate,Components,NHibernate的文档清楚地说明了可以映射带有任何访问修饰符的属性(我假设,通过扩展,组件)。然而,这不是我看到的行为,我想知道是否有人能告诉我这是我的错误,或者这是由于NHibernate中一些记录不良的行为造成的 组件类(省略了一些不重要的方法): 包含类: public class Host { public virtual Guid ID { get; set; } // snip a bunch of other auto-properties // ...

NHibernate的文档清楚地说明了可以映射带有任何访问修饰符的属性(我假设,通过扩展,组件)。然而,这不是我看到的行为,我想知道是否有人能告诉我这是我的错误,或者这是由于NHibernate中一些记录不良的行为造成的

组件类(省略了一些不重要的方法):

包含类:

public class Host
{
    public virtual Guid ID { get; set; }
    // snip a bunch of other auto-properties
    // ...
    protected internal virtual IPAddressComponent IPComponent { get; set; }
    public virtual int Port { get; set; }
}
映射:

<class name="Host" table="Hosts">
  <id name="ID" column="HostID">
    <generator class="guid"/>
  </id>
  <component name="IPComponent">
    <property name="Octet1" column="Host1"/>
    <property name="Octet2" column="Host2"/>
    <property name="Octet3" column="Host3"/>
    <property name="Octet4" column="Host4"/>
  </component>
  <property name="Port"/>
</class>

所以。。。实际上,这个代码/映射组合不能正常工作,加载实体时,
HostComponent
总是
null
。但是,如果我将该属性上的访问修饰符从
protectedinternal
更改为
public
,它会很好地填充,这告诉我映射本身没有任何明显的问题。我知道,如果所有子属性也为null,那么NHibernate将使组件为null,但这似乎与此问题无关

NHibernate是否不支持非公共组件属性,或者我在这里做错了什么


另外,如果有人好奇的话,我使用了这个笨拙的变通方法,这样我就可以在映射的
Host
类中公开一个普通的不可变
IPAddress
属性,并转换为
IPAddress组件
。基础数据库使用4字节字段。如果有更好的方法来做这个映射,我欢迎任何建议;但是,我仍然需要回答这个问题,因为在其他情况下,这个问题很容易出现。

两年后,我遇到了同样的问题。。。可惜这个问题一直没有答案。
<class name="Host" table="Hosts">
  <id name="ID" column="HostID">
    <generator class="guid"/>
  </id>
  <component name="IPComponent">
    <property name="Octet1" column="Host1"/>
    <property name="Octet2" column="Host2"/>
    <property name="Octet3" column="Host3"/>
    <property name="Octet4" column="Host4"/>
  </component>
  <property name="Port"/>
</class>