在NHibernate中使用IList,IEnumerable,ISet或ICollection有什么区别?

Gui*_*rez 5 nhibernate parent-child

什么是两者的区别IList,IEnumerable,ISetICollection在NHibernate的实体类的子对象的集合?即:

public class Parent
{
    public virtual int IdParent { set; get; }

    public virtual IList<Child> Children { set; get; }
    // Or
    public virtual ISet<Child> Children { set; get; }
    // Or so on...
}
Run Code Online (Sandbox Code Playgroud)

fri*_*ley 13

IList的

  • 双向关系:不支持.(因为引入了一个额外的索引列来维护子元素的顺序,这是子元素无法感知的)
  • 订购:是的
  • 类型:IList
  • 重复:允许
  • 在添加元素时:将加载整个集合以获取索引列值.如果孩子的名单很大,请避免.

手袋

  • 双向关系:支持
  • 订购:没有
  • 类型:IList
  • 重复:允许
  • 在添加元素时:只对数据库进行一次点击.没有性能问题.

我设置

  • 双向关系:支持
  • 订购:没有
  • 类型:ISet(直到NHibernate 3.0它支持接口Iesi.Collections)
  • 重复:不允许
  • 在添加元素时:将加载整个集合以检查重复项.如果孩子的名单很大,请避免.

ICollection可以用作子集合的类型,可以通过三个NHibernate映射中的任何一个映射

Nhibernate Cookbook 3.0对使用每个系列都有很好的解释,以防碰巧遇到它.

  • 袋子里我用`ICollection <T>`.`IList <T>`意味着有一个订单和一个索引,对于行李来说不是真的. (2认同)