NHibernate.ObjectDeletedException

voix
1

J'ai besoin d'aide pour comprendre comment procéder. Je construis une application pour gérer une collection de disques et j'ai les applications suivantes.

<class name=Soulful.Core.Domain.Model.Record,Soulful.Core table=Record>
    <id name=Id type=Int32 unsaved-value=0>
        <generator class=native />
    </id>

    <many-to-one name=Artist class=Soulful.Core.Domain.Model.Artist,Soulful.Core foreign-key=FK_Artist_Id cascade=all>
        <column name=ArtistId not-null=true />
    </many-to-one>

    .... more properties
</class>

<class name=Soulful.Core.Domain.Model.Artist,Soulful.Core table=Artist>
    <id name=Id type=Int32 unsaved-value=0>
        <generator class=native />
    </id>

    <property name=Name type=string not-null=true />
</class>

Je veux beaucoup de dossiers à la carte à un artiste et cela fonctionne très bien. Mais j'ai des ennuis quand je suis en train de supprimer un enregistrement. Ce que je voudrais faire est:

Supprimer l'enregistrement et l'artiste si aucun autres documents sont reliés à cet artiste. Si des enregistrements liés à l'artiste, tout simplement supprimer l'enregistrement.

Avec la mise en correspondance actuelle, je reçois l'erreur suivante quand je l'appelle Session.delete (enregistrement) ;:

NHibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations)[Soulful.Core.Domain.Model.Artist#3]

Voici ce que mon DeleteMethod ressemble à:

public virtual void Delete(T entity)
{
    using (var session = GetSession())
    using (var transaction = session.BeginTransaction())
    {
        try
        {
            session.Delete(entity);
            transaction.Commit();
        }
        catch (HibernateException)
        {
            transaction.Rollback();
            throw;
        }
    }
}

Qu'est-ce que je dois faire pour le faire fonctionner comme je le souhaite? S'il vous plaît ne hésitez pas à dire évidente.

Mise à jour , je suppose que je me demande si je dois gérer la suppression des artistes manuellement?

Créé 26/08/2009 à 23:06
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
3

Eh bien, je ne pense pas que l'enregistrement doit avoir une cascade = « all » sur l'artiste.

Le problème est que vous appelez supprimer sur l'artiste et lorsque vous enregistrez l'enregistrement il va essayer de réenregistrer l'artiste (en raison de la cascade). D'où l'erreur :).

Puisque vous avez sans nul sur la propriété de l'artiste de l'enregistrement, vous ne devriez pas supprimer un artiste, mais supprimer l'enregistrement et l'artiste doit être supprimé automatiquement.

Créé 27/08/2009 à 05:11
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more