NHibernate多对多映射不工作

问题描述:

我有一个简单的用户/角色映射Nhibernate映射文件。NHibernate多对多映射不工作

以下是映射文件:

Users.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Sample.Persistence" namespace="Sample.Persistence.Model"> 
    <class name="User" table="Users"> 
     <id name="UserKey"> 
      <generator class="identity"/> 
     </id> 

     <property name="UserName" column="UserName" type="String" /> 
     <property name="Password" column="Password" type="Byte[]" /> 

     <property name="FirstName" column="FirstName" type="String" /> 
     <property name="LastName" column="LastName" type="String" /> 
     <property name="Email" column="Email" type="String" /> 

     <property name="Active" column="Active" type="Boolean" /> 
     <property name="Locked" column="Locked" type="Boolean" /> 

     <property name="LoginFailures" column="LoginFailures" type="int" /> 
     <property name="LockoutDate" column="LockoutDate" type="DateTime" generated="insert" /> 

     <property name="Expired" column="Expired" type="Boolean" generated="insert"/> 

     <set name="Roles" table="UsersRolesBridge" lazy="false"> 
      <key column="UserKey" /> 
      <many-to-many class="Role" 
      not-found="exception" 
      column="RoleKey" /> 
     </set> 

    </class> 
</hibernate-mapping> 

Role.hbm.xml

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="Sample.Persistence" namespace="Sample.Persistence.Model"> 
    <class name="Role" table="Roles"> 
     <id name="RoleKey"> 
      <generator class="identity"/> 
     </id> 
     <property name="Name" column="Name" type="String" /> 

     <set name="Users" inverse="true" table="UsersRolesBridge" lazy="false" > 
      <key column="RoleKey" /> 
      <many-to-many class="User" column="UserKey" /> 
     </set> 
    </class> 
</hibernate-mapping> 

我能够通过以检索每个用户角色NHibernate,但是当我去保存一个新的对象时,角色不会保存在Bridge表中。

用户创建并插入时没有问题。在Session.Save()被调用之前,我已经检查过角色集合是用户的一个字段正在填充适当的角色键。

也没有抛出异常。

UPDATE:

添加级联后,仍然没有真正的插入发生的M-2-M表。

从NHibernate的日志结果如下:

12/22/2010 23:18:11.684 [11] INFO NHibernate.Engine.Cascade 
Message: processing cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: Sample.Persistence.Model.User 
Exception: 

12/22/2010 23:18:11.686 [11] INFO NHibernate.Engine.Cascade 
Message: done processing cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: Sample.Persistence.Model.User 
Exception: 

12/22/2010 23:18:11.789 [11] INFO NHibernate.Engine.Cascade 
Message: processing cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: Sample.Persistence.Model.User 
Exception: 

12/22/2010 23:18:11.792 [11] INFO NHibernate.Engine.Cascade 
Message: cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: Sample.Persistence.Model.User.Roles 
Exception: 

12/22/2010 23:18:11.814 [11] INFO NHibernate.Engine.Cascade 
Message: done cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for collection: Sample.Persistence.Model.User.Roles 
Exception: 

12/22/2010 23:18:11.814 [11] INFO NHibernate.Engine.Cascade 
Message: done processing cascade NHibernate.Engine.CascadingAction+SaveUpdateCascadingAction for: Sample.Persistence.Model.User 

您还没有指定的关系的级联。默认情况下,插入,更新和删除不会级联。更多的信息在这里:

http://ayende.com/Blog/archive/2006/12/02/nhibernatecascadesthedifferentbetweenallalldeleteorphansandsaveupdate.aspx

+0

你的和lonmaxx的工作。 关于会议还有两个问题(会议太早),而且没有包含在交易中。 我现在正在处理一个错误,它尝试更新ROLE表,尽管有相反的设置。可能需要提出另一个问题。 – ClutchDude 2010-12-23 17:19:10

我通常发现,很多很多问题是由未正确设置级联特性造成的。

尝试设置级联=“保存更新”关于在Users.hbm.xml设定的角色属性文件

<set name="Roles" table="UsersRolesBridge" lazy="false" cascade="save-update">