Skip to main content
 首页 » 编程设计

c#之在 NHibernate 设置其值后在集合项上设置事件处理程序

2024年01月13日34dflying

我已经实现了一个事件,每次类中的值更改时都会触发该事件。 我还有一个包含这些项目集合的类,我想订阅这些项目事件。我正在尝试在这样的属性的 setter 中这样做:

public virtual ISet<ItemType> items 
{ 
    get 
 { 
  return this._items; 
 } 
 
 set 
 { 
  this._items = value; 
  foreach (var item in this._items) 
  { 
   item.PropertyChanged += this.Item_ThePropertyChanged; 
  } 
 } 
} 

但是当我们从“for”部分到达“in this._items”时,我会收到“非法访问加载集合”错误。 这是堆栈跟踪:

at NHibernate.Collection.AbstractPersistentCollection.Initialize(Boolean writing)\r\n at NHibernate.Collection.AbstractPersistentCollection.Read()\r\n at NHibernate.Collection.Generic.PersistentGenericSet`1.System.Collections.Generic.IEnumerable.GetEnumerator()\r\n at MyMethod

在此先感谢您的帮助

请您参考如下方法:

显然,NHibernate 在初始化属性时会阻止对集合的访问。将 foreach 循环更改为常规 for 循环是否有帮助?可能只有GetEnumerator()方法被阻塞了:

for (var i = 0; i < _items.Count; i++)  
{ 
  _items[i].PropertyChanged += Item_ThePropertyChanged; 
}