Доменные объекты, вызывающие ошибки NHibernate

2

У меня есть объект домена, который был автоматически создан для меня MyGeneration. Это генерируется с использованием шаблона NHbernate. Это часть объекта - я удалил большую часть его,

[Serializable]
public class Purchase : INotifyPropertyChanged
{
    protected int id;

    public event PropertyChangedEventHandler PropertyChanged;

    public virtual int Id
    {
        get { return id; }
        set {if (value != this.id){id= value;NotifyPropertyChanged("Id");}}
    }
}

Когда я пытаюсь сохранить один из этих объектов в базе данных, я получаю исключение

NHibernate.InvalidProxyTypeException: следующие типы не могут использоваться в качестве прокси: NHibernateDemo.DataLayer.Entities.Purchase: метод add_PropertyChanged должен быть "public/protected virtual"

Etc. Поэтому, если я изменю эту строку

public event PropertyChangedEventHandler PropertyChanged;

Для этого...

public virtual event PropertyChangedEventHandler PropertyChanged;

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

Если я сделаю это "виртуальным событием", вы думаете, что привязка WPF будет работать с ним?

Теги:
nhibernate

2 ответа

3
Лучший ответ

Исключение означает, что NHibernate не может создать динамический прокси объекта, потому что событие не является виртуальным. NH создает прокси-сервер вашего объекта, чтобы обеспечить ленивую загрузку. Ваше решение в порядке.

  • 0
    Мое решение в порядке? То есть виртуализация будет хорошо работать с привязкой WPF, это то, что вы говорите?
  • 0
    Вам нужно сделать его виртуальным, чтобы стратегия отложенной загрузки NHibernate работала. Я ожидаю, что это будет хорошо работать с привязкой WPF, но у меня нет никакого опыта с этим. Объявления должны быть виртуальными, чтобы NH мог создать прокси для вашего объекта; привязка данных будет работать с прокси, как если бы это был реальный объект.
Показать ещё 3 комментария
0

Вы должны явно указывать это свойство в файле сопоставления NHibernate. Взгляните на сгенерированный файл hbm.xml и удалите это свойство из файла сопоставления, чтобы NHibernate проигнорировал его.

  • 0
    Вы говорите, что я должен отображать это поле для этой конкретной ошибки? Кажется, это не так. В моих файлах сопоставления нет сопоставления с событием PropertyChanged

Ещё вопросы

Сообщество Overcoder
Наверх
Меню