nhibernate自定义集合映射

时间:2011-10-12 15:34:52

标签: nhibernate mapping

如何映射具体类的集合属性,而不是接口? 它必须是具体的课程!我无法控制我要映射的类,所以我无法更改为界面。

目前我正在尝试通过编写自定义IUserCollectionType实施和自定义IPersistentCollection实施来解决此问题。

但是......以下异常已经阻止了mu进展:

Test method ShouldSaveEntityWithSections threw exception: 
NHibernate.StaleStateException: Batch update returned unexpected row count from update;  actual row count: 0; expected: 1

Profiler显示NHibernate不会尝试将相关实体插入数据库,但会尝试将其外键更新为父对象。

映射是这样的:

<set name="Rows" table="Rows" lazy="false" cascade="all"
     collection-type="My.PersistentListType`1[Blabla.Row, Blabla], My">
  <key column="ParentID" not-null="true" />
  <one-to-many class="Blabla.Row, Blabla" />
</set>

发生了什么事?为什么NHibernate不将子实体插入db?

1 个答案:

答案 0 :(得分:1)

回答我自己的问题。希望它会帮助遇到同样问题的人。

那个人应该检查他是否在状态中没有创建相关对象,这导致NHibernate认为它已经存在。

在我的情况下,我错误地将映射为主键的属性设置为Guid.NewGuid()而不是Guid.Empty