Свойства защищенных и / или внутренних компонентов в NHibernate - PullRequest
3 голосов
/ 24 декабря 2009

В документах для NHibernate четко указано, что свойства (и, я полагаю, по расширению, компонентов) с любым модификатором доступа могут быть сопоставлены. Тем не менее, это не то поведение, которое я наблюдаю, и мне интересно, может ли кто-нибудь сказать мне, является ли это моей ошибкой или это результат какого-то плохо документированного поведения в NHibernate.

Класс компонента (некоторые несущественные методы опущены):

public class IPAddressComponent
{
    public virtual byte Octet1 { get; set; }
    public virtual byte Octet2 { get; set; }
    public virtual byte Octet3 { get; set; }
    public virtual byte Octet4 { get; set; }
}

Содержащий класс:

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, когда я загружаю сущность. Однако, если я изменю модификатор доступа для этого свойства с protected internal на public, он заполняется нормально, что говорит мне о том, что нет никаких очевидных проблем с самим отображением. Мне известно о поведении, при котором NHibernate будет обнулять компонент, если все подчиненные свойства также будут нулевыми, но это, похоже, не связано с этой проблемой.

NHibernate не поддерживает непубличные свойства компонентов, или я что-то здесь не так делаю?

P.S. Если кому-то любопытно, я использовал этот неуклюжий обходной путь, чтобы я мог выставить неизменное свойство IPAddress с простой ванилью в сопоставленном классе Host и преобразовать в IPAddressComponent. Базовая база данных использует 4-байтовые поля. Если есть лучший способ сделать это отображение, я приветствую любые предложения; однако мне все еще нужно ответить на этот конкретный вопрос, поскольку он может легко возникнуть при других обстоятельствах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...