在nHibernate中更新错误:“索引超出范围。”

时间:2013-06-20 19:45:43

标签: nhibernate fluent-nhibernate

在FNH中调用更新时,出现以下错误:

指数超出范围。必须是非负数且小于集合的大小。\ r \ nParameter name:index

这可能是一些不好的映射。诊断这个的最佳方法是什么?我真的很想看到它试图发布的UPDATE。

以下是代码:

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

1 个答案:

答案 0 :(得分:7)

如果你可以发布你的映射它会有所帮助,但通常这会在你映射一个父&gt;时发生。使用Fluent References语法 AND 的子关系还包含相同关系的外键列映射。

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

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

要严格回答问题(诊断自己),我建议2个选项:

  • 免费选项 - 安装log4Net并配置nHibernate将其所有SQL语句输出到记录器组件。这样,您将在日志文件中看到违规语句,并能够隔离问题。
  • 费用选项 - 由Hibernating Rhinos下载和试用/购买nHibernate Profiler。它将为您提供nHibernate发送到数据库的所有SQL语句的完整详细信息,包括改进的建议或警告,以及一个漂亮的GUI。