sorry, i mean cascade="all-delete-orphan" -- look into the cascade option
for what you want to do

On Fri, Oct 24, 2008 at 2:41 PM, Chad Lee <[EMAIL PROTECTED]> wrote:

> add cascade="true" to your mapping for the bag
>
> also, next time please direct questions like this to the nhusers group
>
>
> On Fri, Oct 24, 2008 at 5:36 AM, Tony <[EMAIL PROTECTED]> wrote:
>
>>
>> I have a scenario in a system which I've tried to simplify as best as
>> I can. We have a table of (lets call them) artefacts, artefacts can be
>> accessed by any number of security roles and security roles can access
>> any number of artefacts. As such, we have 3 tables in the database -
>> one describing artefacts, one describing roles and a many-to-many
>> association table linking artefact ID to Role ID.
>>
>> Domain wise, we have two classes - one for a role and one for an
>> artefact. the artefact class has an IList property that returns a list
>> of roles that can access it. (Roles however do not offer a property to
>> get artefacts that can be accessed).
>>
>> As such, the nhibernate mapping for artefact contains the following;
>>
>> <bag name="AccessRoles" table="ArtefactAccess" order-by="RoleID"
>>    lazy="true" access="field.camelcase-underscore" optimistic-
>> lock="false">
>>    <key column="ArtefactID"/>
>>    <many-to-many class="Role" column="RoleID"/>
>> </bag>
>>
>> This all works fine and if I delete an artefact, the association table
>> is cleaned up appropriately and all references between the removed
>> artefact and roles are removed (the role isn't deleted though,
>> correctly - as we don't want orphans deleted).
>>
>> The problem is - how to delete a role and have it clear up the
>> association table automatically. If I presently try to delete a role,
>> I get a reference constraint as there are still entries in the
>> association table for the role. The only way to successfully delete a
>> role is to query for all artefacts that link to that role, remove the
>> role from the artefact's role collection, update the artefacts and
>> then delete the role - not very efficient or nice, especially when in
>> the un-simplified system, roles can be associated with any number of
>> other tables/objects.
>>
>> I've tried adding a protected IList bag to role that links up to
>> artefact's (even though I don't want this in my domain model) and set
>> this as the inverse relationship (inverse="true" on the bag) but this
>> doesn't solve the problem.
>> I need to be able to hint to NHibernate that I want this association
>> table cleared whenever I delete a role - is this possible, and if so -
>> how do I do it?
>>
>> Thanks for any help.
>>
>
>

Reply via email to