什么是合适的NHibernate/Iesi.Collections.Generic.ISet <T>替换?

lko*_*lko 6 c# nhibernate iesi-collections

在最新版本的Iesi.Collections中缺少Iesi.Collections.Generic.ISet.似乎有三种选择:

  1. LinkedHashSet
  2. ReadOnlySet
  3. SynchronizedSet

Iesi.Collections.Generic.ReadOnlySet似乎最接近ISet,文档说明:

... although it's advertised as immutable it really isn't. 
Anyone with access to the wrapped set can still change the set. 
Run Code Online (Sandbox Code Playgroud)

似乎ReadOnlySet是ISet的最佳替代品?目前,实现是通过公共方法向集合添加项目,因此它似乎是最合适的.替代方案(IList,bag?)似乎需要更多资源或不那么快/有效)?还有更好的选择吗?(该列表不应该有重复,可以手动验证)

我会做的事情如下:

public virtual ISet<MyClass> MyClass
{
    get { return this.myClass }
}

public virtual void AddItem(MyClass item)
{
    ... // Null checks and initialize ISet if null
    myClass.Add(item)
}
Run Code Online (Sandbox Code Playgroud)

基本上它归结为替代品,是否存在没有负面影响的替代品,如速度等?

lko*_*lko 4

好吧,从 Nuget 获取 Iesi.Collections 仅提供 v.4。

这里的解决方案适用于 NHibernate 3.x,但这个问题可能与 NHibernate 4+ 相关。NHibernate、Fluent NHibernate 和 Iesi.Collection 的问题。接下来你会尝试什么?

我删除了 Iesi 参考并添加了 NHibernate,其中包括旧版本的 Iesi 和 ISet。它实际上并没有解决 ISet 与替代方案的问题,但它确实解决了我的问题,因此我可以继续使用 ISet。

也许他们会在 NHibernate 4.0 版本中添加它,否则那时就需要进行转换。