我有一個由MyGeneration爲我自動生成的域對象。這是使用NHbernate模板生成的。這是對象的一部分 - 我已刪除了大部分,導致NHibernate錯誤的域對象
[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 event PropertyChangedEventHandler PropertyChanged;
要這個......
public virtual event PropertyChangedEventHandler PropertyChanged;
它的工作原理,但對我來說這似乎不是一個很好的解決方案。 NHibernate正在處理那個事件屬性,就像它是一個將要保存到數據庫中的字段一樣。有沒有一種方法可以讓NHibernate忽略它?
如果我把它變成'虛擬事件',你認爲WPF綁定仍然可以使用它嗎?
我的解決方案很好嗎?所以使它虛擬將WPF綁定工作正常,你在說什麼? – peter 2009-11-06 01:35:34
您需要將它變爲虛擬才能使NHibernate的延遲加載策略發揮作用。我預計WPF綁定可以正常工作,但我沒有任何經驗。聲明必須是虛擬的,以便NH可以爲您的對象創建代理;數據綁定將與代理一起工作,就好像它是真實的對象一樣。 – 2009-11-06 12:24:27
你說解決方案很好,因爲它可以工作,但對我來說這很愚蠢。 NHibernate強制事件是虛擬的,而事實上它並不是必須的,因爲它不包含任何狀態。 除此之外,它也是一個限制:如果事件在基類中聲明並且在那裏不是虛擬的呢?在你的類中隱藏和重新創建事件將不起作用,因爲NHibernate一直在拋出異常。 – 2016-07-08 16:40:26