3

When calling an update in FNH, I get the following error:

Index was out of range. Must be non-negative and less than the size of the collection.\r\nParameter name: index

It's probably some bad mapping. What is the best way to diagnose this? I really want to see the UPDATE it is trying to issue.

Here is the code:

    public void Update<T>(IEnumerable<T> values)
    {
            foreach (var value in values)
            {
                using (var tx = Session.BeginTransaction())
                {
                    this.Update(value, tx);
                    tx.Commit();
                }
        }
    }
4

1 回答 1

7

如果您可以发布您的映射,它会有所帮助,但通常这发生在您使用 FluentReferences语法映射父 > 子关系并且还包括相同关系的外键列的映射时。

这会导致 nHibernate 两次映射该字段并导致您遇到的错误。

当您使用引用语法时,nHibernate 会为您处理外键列,但是如果您仍然希望它在您的对象中,只需更改该字段的映射定义以ReadOnly()选择解决问题。如果您不需要它,您可以完全从映射定义中删除。

为了严格回答所提出的问题(诊断自己),我建议 2 个选项:

  • 免费选项 - 安装log4Net和配置 nHibernate 以将其所有 SQL 语句输出到记录器组件。这样,您将在日志文件中看到有问题的语句并能够隔离问题。
  • 成本选项 - 下载和试用/购买Hibernate Rhinos 的nHibernate Profiler。它将为您提供 nHibernate 发送到数据库的所有 SQL 语句的完整详细信息,并提供改进建议或警告,并且所有这些都在一个漂亮的 GUI 中。
于 2013-06-21T10:43:59.940 回答