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

时间:2013-06-10 07:36:21

标签: c# nhibernate iesi-collections

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

  1. LinkedHashSet
  2. ReadOnlySet
  3. SynchronizedSet
  4. 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. 
    

    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)
    }
    

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

2 个答案:

答案 0 :(得分:4)

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

这里的解决方案适用于NHibernate 3.x,但这个问题可能与NHibernate 4+有关。 Issuewith NHibernate, Fluent NHibernate and Iesi.Collection. What would you try next?

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

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

答案 1 :(得分:2)

Iesi.Collections v4适用于.Net 4.Iesi 3的ISet的正确替代是使用.Net4.0中.Net的System.Collections.Generic中包含的ISet。

您通常也会使用.Net的HashSet类。

第4节中Iesi中剩下的类是一些特殊情况的实现,很少使用。