NHibernate:为插入操作调用flush时接收索引超出范围

NHibernate:为插入操作调用flush时接收索引超出范围,nhibernate,insert,flush,Nhibernate,Insert,Flush,在使用NHibernate时,我花了一天的大部分时间试图解决这个问题:“索引超出了范围。必须是非负的,并且小于集合的大小。 参数名称:索引“ 我的更新和删除工作正常,但在调用save()之后调用flush不起作用。我不认为发布所有的代码(有很多)是有用的,因为我不确定此时您需要看到什么。我试图保存的数据访问对象使用复合键(如果有帮助的话)。此外,我正在使用NHibernate.Mapping.Attributes创建映射 在我的堆栈跟踪中,NHibernate似乎试图向ADO.Net类发送无效数

在使用NHibernate时,我花了一天的大部分时间试图解决这个问题:“索引超出了范围。必须是非负的,并且小于集合的大小。 参数名称:索引“

我的更新和删除工作正常,但在调用save()之后调用flush不起作用。我不认为发布所有的代码(有很多)是有用的,因为我不确定此时您需要看到什么。我试图保存的数据访问对象使用复合键(如果有帮助的话)。此外,我正在使用NHibernate.Mapping.Attributes创建映射

在我的堆栈跟踪中,NHibernate似乎试图向ADO.Net类发送无效数量的参数以执行插入操作。也就是说,为了查看sql语句,我将trace设置为true,但在将sql语句发送到输出之前会出现错误,因此我不确定它试图构建什么

public void Insert(ProddataDAO Entity)
{
        Entity.PSEQ = GetNewSeqID(Entity.PCUST); // <- because I'm using a composite key, this function gets my a unique value by a group
        NHibernateHelperCGC.CurrentSession.Save(Entity);            
        NHibernateHelperCGC.CurrentSession.Flush();   // <-This raises the error         
}
public void插入(ProddataDAO实体)
{

Entity.PSEQ=GetNewSeqID(Entity.PCUST);//此错误通常在表中缺少列时出现。因此,如果类具有映射到数据库中缺少的表列的属性,则您将看到此错误


基本上检查映射和数据库表之间的不匹配(缺少列、类型不匹配等)。问题可能出现在相关的表/实体上,而不是您试图保存的表/实体上。

我也有此问题,在谷歌搜索数小时后,我发现这是映射中的一个问题:我有两次使用相同的
名称的列(在我的例子中,它既是
的一部分,也是
元素中的一列。我解决了将
更改为
并删除
元素的问题).

有人在另一篇帖子中回复说,我有两个额外的映射属性。一个用于属性,另一个为键控,因此我会给你一个接近的分数。与对多个问题发布相同的答案不同,你应该将问题标记为重复的问题。抱歉,我不知道!我知道你还不能这样做,因为你还没有达到50 repu还没有,但不会花太长时间。