Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > NHibernate
NHibernate Forum d'entraide sur l'utilisation du mappeur objet/relationnel NHibernate.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/03/2011, 15h31   #1
MacReiben
Membre éclairé
 
Homme Christian FINEL
Développeur .NET
Inscription : avril 2004
Messages : 265
Détails du profil
Informations personnelles :
Nom : Homme Christian FINEL
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Finance

Informations forums :
Inscription : avril 2004
Messages : 265
Points : 311
Points : 311
Par défaut [C#][NHibernate] Cascade update/delete

Bonjour,

J'ai besoin de configurer NHibernate de manière à ce que la suppression de l'élément parent dans une relation OneToMany ne supprime pas la partie enfant, un petit schéma :

EntitéParent 1 ---- n EntitéEnfantCollection

J'ai déjà exclut cascade="all-delete-orphan" - j'ai tenté cascade="save-update', sans résultat.

Quelqu'un a déjà eu ce problème ?
__________________
http://www.macreiben.net
MacReiben est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 11h29   #2
B.AF
Membre Expert
 
Inscription : février 2005
Messages : 1 238
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 238
Points : 1 655
Points : 1 655
En dehors du fait qu'il faut aussi contrôler la maniére dont cette relation est matérialisées dans la base,

Je ne suis pas certain de comprendre l'objectif :

Je comprends que si tu a un objet parent qui a une collection d'enfant, si tu supprimes l'enfant, tu ne veux pas supprimer le parent ?

Les modes de fonctionnement sont les suivants :
none
Aucune action effectuée, c'est à "toi" de gérer le nettoyage de l'association manuellement
save-update
chaque élément de l'association est contrôlé et sauvé ou updaté si nécessaire.
delete
La suppression du parent entraine la suppression des objets associés.
delete-orphan
La suppression du parent entraine la suppression des objets associés.
Un objet supprimé de la collection qui n'est plus rattaché à un parent sera supprimé (orphelin)
all
Itére toute l'association et applique les modifications à la collection.
all-delete-orphan
Comme all, plus supprime les éléments de la collection orphelins

Globalement ce que tu souhaites semble être none, ce qui veut cependant dire dans ton cas que tu n'as pas d'intégrité relationnelle dans ta base sur cette relation, puisqu'il peut exister des éléments enfants orphelins.

Ou éventuellement all, en fonction de la contrainte qui fera une mise à jour de la collection sans traiter les orphelins (donc les éléments détachés du parent).


Mais si tu avais un bout de code et de mapping, je t'aidera mieux probablement.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/03/2011, 11h43   #3
MacReiben
Membre éclairé
 
Homme Christian FINEL
Développeur .NET
Inscription : avril 2004
Messages : 265
Détails du profil
Informations personnelles :
Nom : Homme Christian FINEL
Localisation : France

Informations professionnelles :
Activité : Développeur .NET
Secteur : Finance

Informations forums :
Inscription : avril 2004
Messages : 265
Points : 311
Points : 311
Alors en fait c'est exactement l'inverse ^^. Je précise :

ObjetParent 1 -- n ObjetsEnfant n -- 1 AutreObject

Je veux supprime l'objet ObjectParent sans supprimer ObjetEnfant car sinon je perds des données.

La solution :
- Modifier la contrainte Foreign key (SQL Server 2008) avec ON UPDATE SET NULL. On modifiera la colonne contenant la clé étrangère avec un DEFAULT NULL.

- Modifier le mapping de la collection enfant dans ObjectParent : on place l'attribut cascade à save-update et inverse à true.

Avec cette configuration, lors de la suppression d'une instance d'ObjetParent, les clés étrangères associés sont placées à NULL.

Je passe le topic à résolu .
__________________
http://www.macreiben.net
MacReiben est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h07.


 
 
 
 
Partenaires

Hébergement Web