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

标签 nhibernate parent-child

使用 IList 有什么区别? , IEnumerable , ISetICollection用于 NHibernate 实体类中的子对象集合? IE:

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

最佳答案

列表

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


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

  • 我设置
  • 双向关系:支持
  • 已订购:否
  • 类型:ISet(直到 NHibernate 3.0 支持 Iesi.Collections 的接口(interface))
  • 重复:不允许
  • 添加元素时:将加载整个集合以检查重复项。如果 child 的名单很大,请避免。

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

    Nhibernate Cookbook 3.0 对使用每个集合都有很好的解释,以防万一你碰巧遇到它。

    关于nhibernate - 在 NHibernate 中使用 IList、IEnumerable、ISet 或 ICollection 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17558752/

    相关文章:

    java - 使用接口(interface)的构造函数中的设置值错误

    c# - 确定哪个数据库行导致 "Input string was not in correct format"

    c# - NHibernate:在更新/删除/插入映射到 View 的类时是否可以使用存储过程?

    javascript - react ,未定义这个

    bash - 从 bash 打开然后杀死子进程

    parent-child - 使用 nightwatch js 列出子元素

    javascript - 如何获取子节点值并更改值

    nhibernate - 按代码映射忽略 BagPropertyMapper 中的列名

    nhibernate - 我在使用 Nhibernate Query Over fetch 时做错了什么吗?

    如果集合中的子项具有特定值,则用于选择父项的 nHibernate 标准