我有一个由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'
等。所以,如果我改变这一行
public event PropertyChangedEventHandler PropertyChanged;
对此...
public virtual event PropertyChangedEventHandler PropertyChanged;
它有效,但对我来说这似乎不是一个很好的解决方案。 NHibernate将事件属性视为它将持久存储到数据库中的字段。有没有办法告诉NHibernate忽略它?
如果我将其设为“虚拟事件”,您认为WPF绑定仍然适用吗?
答案 0 :(得分:3)
异常意味着NHibernate无法创建对象的动态代理,因为事件不是虚拟的。 NH创建对象的代理以允许延迟加载。你的解决方案很好。
答案 1 :(得分:0)
您必须在NHibernate映射文件中显式映射此属性。查看生成的hbm.xml文件并从映射文件中删除此属性,以便NHibernate忽略它。