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