У меня есть объект домена, который был автоматически создан для меня 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 не может создать динамический прокси объекта, потому что событие не является виртуальным. NH создает прокси-сервер вашего объекта, чтобы обеспечить ленивую загрузку. Ваше решение в порядке.
Вы должны явно указывать это свойство в файле сопоставления NHibernate. Взгляните на сгенерированный файл hbm.xml и удалите это свойство из файла сопоставления, чтобы NHibernate проигнорировал его.