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 26/05/2011, 13h59   #1
dublow
Nouveau Membre du Club
 
Nicolas DELFOUR
Développeur Web
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Nicolas DELFOUR
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 25
Points : 25
Par défaut [NHibernate] Isoler un objet pour sa suppression

Bonjour à tous,

Je sais que la question que je vais poser à déjà été abordée mais de mon côté cela ne fonctionne pas.

Voici l'erreur:
Citation:
deleted object would be re-saved by cascade (remove deleted object from associations)
Fichier de mapping(simplifié):
Artwork:
Code :
1
2
3
4
 
HasMany(x => x.Comments).Cascade.AllDeleteOrphan().Inverse();
HasMany(x => x.Promotions).Cascade.AllDeleteOrphan().Inverse();
HasMany(x => x.Images).Cascade.AllDeleteOrphan().Inverse();
Comments:
Code :
1
2
 
References(x => x.Artwork).Cascade.None().Not.Nullable();
Promotions:
Code :
1
2
 
References(x => x.Artwork).Cascade.None().Not.Nullable();
Images:
Code :
1
2
 
References(x => x.Artwork).Cascade.None().Not.Nullable();
lorsque je veux supprimer un artwork, j'isole bien l'objet?
Code :
1
2
3
4
5
6
 
artwork.Comments.Clear();
artwork.Promotions.Clear();
artwork.Images.Clear();
 
bool isDeleted = artworkDao.delete(artwork);-->False
dublow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 17h50   #2
NicoL__
Membre expérimenté
 
Avatar de NicoL__
 
Homme Nicolas
Inscription : janvier 2011
Messages : 390
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 390
Points : 559
Points : 559
Tu as une exception dans ton DAO ? Si tu as récupérer False c'est qu'un exception a du se produire et qu'elle est catchée.
NicoL__ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/05/2011, 19h21   #3
dublow
Nouveau Membre du Club
 
Nicolas DELFOUR
Développeur Web
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Nicolas DELFOUR
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 25
Points : 25
l'exception que je récupère dans le catch:
Citation:
ObjectDeletedException : deleted object would be re-saved by cascade (remove deleted object from associations)
dublow est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/05/2011, 17h21   #4
iberserk
Expert Confirmé
 
Avatar de iberserk
 
Homme Bruno IGNACE
Architecte de base de données
Inscription : novembre 2004
Messages : 1 514
Détails du profil
Informations personnelles :
Nom : Homme Bruno IGNACE
Âge : 31
Localisation : France, Gironde (Aquitaine)

Informations professionnelles :
Activité : Architecte de base de données
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : novembre 2004
Messages : 1 514
Points : 2 756
Points : 2 756
Envoyer un message via MSN à iberserk
Bonjour, je ne connais pas parfaitement NHIBERNATE mais pourquoi faites vous des clear() sur vos objets enfants?

Ne vont'il pas être automatiquement supprimé en cascade lors de la suppression de atwork?
__________________
Prendre conscience, c'est transformer le voile qui recouvre la lumière en miroir.
MCTS Database Development
iberserk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/05/2011, 16h40   #5
NicoL__
Membre expérimenté
 
Avatar de NicoL__
 
Homme Nicolas
Inscription : janvier 2011
Messages : 390
Détails du profil
Informations personnelles :
Nom : Homme Nicolas
Localisation : France

Informations forums :
Inscription : janvier 2011
Messages : 390
Points : 559
Points : 559
Effectivement dans le delete nhibernate doit identifié que l'objet artwork a été modifié alors qu'il est demandé de l'effacer ce qui engendre l'erreur. Effacer directement sans réaliser les Clear devrait fonctionner.
NicoL__ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/06/2011, 16h12   #6
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
Il suffit de deleter l'artwork. Là tes associations sont assez bizarres...

C'est le syndrôme de mapper le parent dans les éléments de la collection.

Tel que ton mapping fluent est fait; si tu delete artwork il deletera toutes les références liées.

Là comme artwork est deleté et que chaque élément de la collection doit supprimer les orphelins et les liaisons, quand il supprime les enfants et que le parent est supprimé, il tombe sur la contrainte non null, donc il dit qu'il est nécessaire de créer le parent pour pouvoir faire ton delete.

C'est un mauvais usage.

Il te suffit de regarder le SQL généré pour comprendre.
B.AF est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/06/2011, 20h59   #7
dublow
Nouveau Membre du Club
 
Nicolas DELFOUR
Développeur Web
Inscription : novembre 2009
Messages : 57
Détails du profil
Informations personnelles :
Nom : Nicolas DELFOUR
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web

Informations forums :
Inscription : novembre 2009
Messages : 57
Points : 25
Points : 25
Merci pour les réponses, je vais vérifier le mapping mais c'est quand même bizarre parce que les autre fichiers mappé fonctionne comme celui la et j'ai pas de problème
dublow 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 15h59.


 
 
 
 
Partenaires

Hébergement Web