NHibernate:Bag性能混乱。文档是否过时了?

时间:2016-11-17 11:32:14

标签: nhibernate

如果您看到有关集合性能的文档: http://nhibernate.info/doc/nhibernate-reference/performance.html#performance-collections-taxonomy

它说:

  袋子是最糟糕的情况。由于包允许重复的元素值并且没有索引列,因此不能定义主键。 NHibernate无法区分重复的行。 NHibernate通过完全删除(在单个DELETE中)并在每次更改时重新创建集合来解决此问题。这可能效率很低。

但是我不能确认这个案子。例如,如果我有一个简单的父子关系与cascade all,使用bag,使用以下代码:

    using (var sf = NHibernateHelper.SessionFactory)
        using (var session = sf.OpenSession())
        {
            var trx = session.BeginTransaction();
            var par = session.Query<Parent>().First();
            var c = new Child { Id = 4, Name = "Child4" };
            par.Children.Add(c);
            trx.Commit();
        }

我没有看到任何删除,但是对子表的插入和parentid的更新。这实际上是有道理的。但它似乎与文档相矛盾。我错过了什么?

1 个答案:

答案 0 :(得分:0)

您提供的示例几乎与NHibernate reference at 19.5.3. Bags and lists are the most efficient inverse collections中记录的有效案例完全相同。