在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();
}
}
}
答案 0 :(得分:7)
如果你可以发布你的映射它会有所帮助,但通常这会在你映射一个父&gt;时发生。使用Fluent References
语法 AND 的子关系还包含相同关系的外键列映射。
这导致nHibernate将字段映射两次并导致您遇到的错误。
当您使用References语法时,nHibernate将为您处理外键列,但是如果您仍然希望它在您的对象中,只需更改该字段的映射定义以使用ReadOnly()
选项来解决问题。如果您不需要它,您可以完全从映射定义中删除。
要严格回答问题(诊断自己),我建议2个选项:
log4Net
并配置nHibernate将其所有SQL语句输出到记录器组件。这样,您将在日志文件中看到违规语句,并能够隔离问题。