nHibernate - когда использовать объекты при определении класса (и таблицы) - PullRequest
2 голосов
/ 04 апреля 2011

Я недавно погрузился в проект, который интенсивно использует nHibernate. Я получил достаточно много концепций для их реализации, но мне трудно определить, когда использовать объекты, связанные с таблицами, в классе, определяющем другую таблицу.

Это просто очень простой пример, который я составил ... Я мог бы создать класс Order (который содержит FK to StateID) со стандартными типами, но из того, что я видел, я также могу использовать существующие объекты в моем определения. Например, StateID может быть:

    // StateID int, NOT NULL
    private int _stateid;
    public virtual int StateID
    {
        get { return this._stateid; }
        set { this._stateid= value; }
    }

или

    // State Object
    private State _state;
    public virtual State State
    {
        get { return this._state; }
        set { this._state= value; }
    }

Используется ли объект, только если существует отношение, которое должно каскадно меняться? Когда я должен использовать стандартный тип против объекта на основе таблицы? Кажется, не имеет смысла использовать объект, если я использую только одно свойство объекта (например, PK). Если, конечно, мне нужно легко получить доступ к другому свойству. IE: я мог бы сделать Order.State.StateName, чтобы получить имя состояния, связанного с StateID в таблице заказов. Может быть, это когда он используется?

Я сказал это не так хорошо, как хотелось бы, но я думаю, что это дает общий вопрос.

1 Ответ

3 голосов
/ 04 апреля 2011

Вы можете определить lazy="proxy" в отображении свойства State:

<many-to-one name="State" class="State" lazy="proxy" ... />

Если вы сделаете это, для свойства State будет создан прокси, который содержит только идентификатор.Так что, пока вы получаете доступ только к Order.State.Id, он не получает весь объект State из базы данных.Если вы делаете доступ к любому другому свойству объекта State, то NHiberate автоматически извлечет полный объект State из базы данных.

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