code_junkie

Many to Many delete cascade in NHibernate

Nov 11th, 2011
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.76 KB | None | 0 0
  1. <bag name="AccessRoles" table="ArtefactAccess" order-by="RoleID"
  2. lazy="true" access="field.camelcase-underscore" optimistic-lock="false">
  3. <key column="ArtefactID"/>
  4. <many-to-many class="Role" column="RoleID"/>
  5. </bag>
  6.  
  7. <bag name="Roles" table="RolesToAccess" cascade="none" lazy="false">
  8. <key column="AccessId" />
  9. <many-to-many column="AccessId" class="Domain.Compound,Domain" />
  10. </bag>
  11.  
  12. <bag name="RolesToAccess" cascade="save-update" inverse="true" lazy="false">
  13. <key column="AccessId" on-delete="cascade" />
  14. <one-to-many class="Domain.RolesToAccess,Domain" />
  15. </bag>
  16.  
  17. <bag name="Accesses" table="RolesToAccess" cascade="none" lazy="false">
  18. <key column="RoleId" />
  19. <many-to-many column="RoleId" class="Domain.Compound,Domain" />
  20. </bag>
  21.  
  22. <bag name="RolesToAccess" cascade="save-update" inverse="true" lazy="false">
  23. <key column="RoleId" on-delete="cascade" />
  24. <one-to-many class="Domain.RolesToAccess,Domain" />
  25. </bag>
  26.  
  27. <bag name="Artifacts" table="[ArtifactAccess]" schema="[Dbo]" lazy="true"
  28. inverse="false" cascade="none" generic="true">
  29. <key column="[ArtifactID]"/>
  30.  
  31. <many-to-many column="[RoleID]" class="Role" />
  32. </bag>
  33.  
  34. <bag name="Roles" table="[ArtifactAccess]" schema="[Dbo]" lazy="true"
  35. inverse="false" cascade="none" generic="true">
  36. <key column="[RoleID]"/>
  37.  
  38. <many-to-many column="[ArtifactID]" class="Role" />
  39. </bag>
  40.  
  41. foreach(var artifact in role.Artifacts)
  42. foreach(var role in artifact.Roles)
  43. if(role == roleToDelete)
  44. artifact.Roles.Remove(role)
  45. artifact.Save();
  46. roleToDelete.Delete();
  47.  
  48. roleToDelete.Artifacts.Clear(); //removes the association record
  49. roleToDelete.Delete(); // removes the artifact record
Add Comment
Please, Sign In to add comment