域对象导致NHibernate错误

时间:2009-11-06 01:01:52

标签: c# nhibernate

我有一个由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绑定仍然适用吗?

2 个答案:

答案 0 :(得分:3)

异常意味着NHibernate无法创建对象的动态代理,因为事件不是虚拟的。 NH创建对象的代理以允许延迟加载。你的解决方案很好。

答案 1 :(得分:0)

您必须在NHibernate映射文件中显式映射此属性。查看生成的hbm.xml文件并从映射文件中删除此属性,以便NHibernate忽略它。