Отображение коллекции NHibernate - Свойства только для чтения - PullRequest
1 голос
/ 31 марта 2010

У меня есть следующий класс

public class Person
{
    private IList<Person> _children;

    public IEnumerable<Person> Children { get; }

    public void AddChild(Person child)
    {
        // Some business logic and adding to the internal list
    }
}

Какие изменения я должен был бы внести, чтобы NHibenrate смог сохранить коллекцию Child (кроме создания виртуального, я знаю это).

Должен ли я добавить установщик к свойству children, которое делает что-то вроде _children.Clear(); _children.AddRange(value). В настоящее время модель довольно хорошо выражает мои намерения, но я не уверен, сколько нужно изменить, чтобы NH смог помочь мне с постоянством.

1 Ответ

2 голосов
/ 31 марта 2010

NHibernate может отображать частные поля. Стратегии доступа и именования обсуждаются в разделе свойство справочной документации.

Для работы прокси необходимо сделать виртуальных публичных участников виртуальными. Обычно это сгенерированные во время выполнения подклассы ваших классов сущностей.

В этом примере отображение поля _children будет Children в запросах HQL и Criteria.

<class name="Person" table="person">
    <bag name="Children" access="field.camelcase-underscore">
        <key column="parentid" />
        <one-to-many class="Person" />
    </bag>
</class>
...