2010-09-13 5 views
1

J'ai une association unidirectionnelle plusieurs-à-plusieurs: la classe ListDefinition a la propriété Columns de type IList, tandis qu'une colonne peut faire partie de plusieurs ListDefinition- s. Le problème est que, chaque fois que j'essaie de supprimer une colonne d'une collection Columns (sans la supprimer ou la supprimer d'autres ListDefinitions), j'obtiens cette erreur:
objet supprimé serait ré-enregistré par cascade (supprimer l'objet supprimé des associations) [Domain.Lists.Definitions.ListColumnDefinition # 2]Suppression d'un élément d'une association plusieurs-à-plusieurs dans NHibernate

Ma cartographie est générée via NH Courant:

mapping.HasManyToMany(list => list.Columns) 
.AsList(part => part.Column("`index`")) 
.Cascade.AllDeleteOrphan() 

Voici le HBM généré:

< xmlns hibernate-mapping = "urn: NHibernate -mapping-2.2 "default-access =" propriété "auto-impo rt = "true" default-cascade = "tous" default-lazy = "false">
< classe xmlns = "urn: nhibernate-mapping-2.2" mutable = "true" nom = "Domain.Lists.Definitions.ListDefinition , Domaine, version = 1.0.0.0, culture = neutre, PublicKeyToken = null "table =" ListDefinition ">
id access =" nosetter.camelcase-underscore "nom =" Id "type =" System.Int32, mscorlib, version = 4.0.0.0, Culture = neutral, PublicKeyToken = b77a5c561934e089 ">
< nom de colonne =" Id »/>
< classe générateur = "identité"/>
</id>
< cascade de liste = "All-delete-orphan" name = "Colonnes" table = "ListColumnDefinitionToListDefinition" mutable = "true">
< clés>
< nom de colonne = "ListDefinition_id" /> </key>
index <>
< nom de colonne = » index "/>
</index>
< many-to-many class =" Domain.Lists.Definitions.ListColumnDefinition, domaine, version = 1.0.0.0, Culture = neutral, PublicKeyToken = null ">
< nom de colonne = "ListColumnDefinition_id" />
</many-to-many>
</liste>

</class> </hibernate-mapping>

+0

Vous ne savez pas si je comprends ce que vous faites, Pourriez-vous coller le code approprié? (comment vous supprimez l'entité qui lance cette erreur) –

+0

Je ne * * supprime pas une entité. Je fais juste ceci: listDefinition.Columns.Remove (colonne); – ulu

Répondre

1

Etes-vous sûr "all-delete-orphan" est ce que tu veux?

À partir de la section 21.3. Cycle de vie en cascade du lien ci-dessus:

In our case, a Child cannot exist without its parent. So if we remove a Child from the collection, we do want it to be deleted. To do this, we must use cascade="all-delete-orphan".

+1

est correct. Utilisez All au lieu de AllDeleteOrphan. –

Questions connexes