nHibernate刷新会话时删除并重新插入多对多值

nHibernate刷新会话时删除并重新插入多对多值,nhibernate,nhibernate-mapping,Nhibernate,Nhibernate Mapping,考虑下表映射,这只是典型的用户安全角色映射示例 <?xml version="1.0" encoding="utf-8" ?> <hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> <class name="Model.User, Domain" table="[User]"> <id name="UserID" column="UserId" type="Int32"> <gene

考虑下表映射,这只是典型的用户安全角色映射示例

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2">
<class name="Model.User, Domain" table="[User]">
<id name="UserID" column="UserId" type="Int32">
  <generator class="hilo">
    <param name="table">NhibernateUniqueKey</param>
    <param name="column">NextHi</param>
    <param name="where">TableName='[User]'</param>
    <param name="max_lo">20</param>
  </generator>
</id>
<property name="UserName" column="UserName" type="String" length="20"/>
<property name="Password" column="Password" type="String" length="20"/>
.
.
<bag name="SecurityRoles" table="UserSecurityRole" lazy="false">
  <key column="UserId"></key>
  <many-to-many class="Model.SecurityRole, Domain"          column="SecurityRoleId"></many-to-many>
</bag>

NhibernateUniqueKey
下一个
TableName='[User]'
20
.
.

问题是,当我通过用户名[使用条件查询]检索用户,并刷新会话时,所有附加到检索到的用户的安全角色都被删除并重新插入,尽管我没有对检索到的对象进行任何修改


我是做错了什么,还是这就是nhibernate设计的工作方式?

这就是bag的行为。要避免这种情况,请使用
idbag
set

或如果您想保留IList。不过,您必须向UserSecurityRole表添加一个索引列。