在我的ASP.NET webforms应用程序中,我主要得到上述异常,以及:
- 拥有实体实例不再引用具有cascade =“all-delete-orphan”的集合:Persistence.Product.ModelMap
- 收集由flush()处理两次
- 找到对集合的共享引用:Persistence.Product.ModelMap
当我正在检索产品时。只有当我有两个或更多请求一次命中服务器时才会发生这种情况。我每个请求都使用一个会话。
属性ModelMap在Products映射定义的Hibernate XML中定义如下:
<bag name="ModelMap" table="MapProductModel" cascade="all-delete-orphan" lazy="true" inverse="true" where="IsDeleted=0">
<key column="fkProductId" />
<one-to-many class="MapProductModel" />
</bag>
这发生在以下代码行
上IList<T> itemList = criteria.List<T>();
检索产品时。
任何帮助都非常感谢,谷歌并没有真正提出任何建议。
答案 0 :(得分:1)
criteria.List触发会话刷新,这会导致NH遍历所有对象并找出需要发送到db的命令。任何其他会话刷新可能会触发相同的异常。
关于你使用ModelMap的方式导致刷新周期中断。当我遇到这些错误时,我通常会通过评论我逐一引用该集合的地方来缩小它。一旦你知道违规行修理它应该很容易(希望如此)
答案 1 :(得分:1)
ASP.NET是多线程的,因此请求将进入同一HTTP请求中的多个线程。您应该使用NHibernate的Web会话上下文(或其他方式);为每个HTTP请求创建一个新会话是不够的。见http://nhibernate.info/doc/nhibernate-reference/architecture.html#architecture-current-session