NHibernate: Как отключить виртуальный для свойств класса? - PullRequest
2 голосов
/ 10 марта 2010

как именно я могу использовать публичные методы (не виртуальные) с NHibernate?

У меня есть этот код:

public string crewNumber
    {
        get
        {
            return this.crewNumberField;
        }
        set
        {
            this.crewNumberField = value;
        }
    }

Обратите внимание, что все мои классы, свойства, методы и интерфейсы генерируются автоматически, и я не хочу менять их вручную.

Выше кода выдает эту ошибку:

Следующие типы нельзя использовать как прокси: ... метод get_crewNumber должен быть «публичным / защищенным виртуальным»

Я вижу, что можно использовать простые общедоступные свойства здесь :

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

Как отключить этот виртуальный по умолчанию?

Это сводит меня с ума. Мне очень хочется притащить один адаптер данных в visual studio и раз и навсегда покончить с этой нелепой ситуацией; -)

Спасибо

Ответы [ 2 ]

7 голосов
/ 10 марта 2010

Укажите, что динамические прокси не должны использоваться для этого класса, указав lazy = false в отображении классов.

Примерно так:

 <class name="MyClass" table="MyTable" lazy="false">
 </class>

Это означает, что вы не можетеиспользовать динамические прокси с NHibernate.Чтобы быть более понятным: - когда вы извлекаете экземпляр вашего класса, который может использовать динамические прокси, вы получите «пустой экземпляр».То есть NHibernate пока не будет получать данные из БД.Вы получите объект, чей Id будет заполнен, а другие свойства - нет.Только при доступе к свойству NHibernate будет загружать данные из БД.Вот почему свойства должны быть виртуальными, потому что NHibernate создаст подкласс вашего класса внутри и переопределит свойства, чтобы он мог достичь этого поведения.

Я всегда указываю 'lazy = false' на моемсопоставление классов, поскольку я не хочу иметь виртуальные свойства по причине, связанной с инфраструктурой, а не «связанной с доменом».

(обратите внимание, что это не имеет ничего общего с отложенной загрузкой ассоциаций; их можно загружать с отложенной загрузкой, если вы не используете динамические прокси).

0 голосов
/ 10 марта 2010

Поместите lazy="false" на отображение класса:

<class name="MyClass" table="MY_TABLE" lazy="false">
...