NHibernate.ObjectDeletedException

stimmen
1

Ich brauche Hilfe, herauszufinden, wie es weitergeht. Ich baue eine App eine Plattensammlung zu verwalten, und ich habe die folgenden Abbildungen.

<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>

Ich mag viele Datensätze zu einem Künstler kartieren und das funktioniert ganz gut. Aber ich laufe in Schwierigkeiten, wenn ich versuche, einen Datensatz zu löschen. Was ich möchte, ist zu tun:

Löschen Sie die Aufzeichnung und den Künstler, wenn keine anderen Aufzeichnungen zu diesem Künstler verbunden sind. Wenn Datensätze an die Künstler verbunden sind, löschen Sie einfach den Datensatz.

Mit dem aktuellen Mapping erhalte ich die folgende Fehlermeldung, wenn ich session.Delete (Aufnahme) nenne ;:

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

Hier ist, was meine DeleteMethod wie folgt aussieht:

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;
        }
    }
}

Was würde ich tun muss, um es so läuft ich es will? Bitte zögern Sie nicht klar darzulegen.

Aktualisieren Sie Ich glaube , ich bin gefragt , ob ich manuell Löschen von Künstlern behandeln müssen?

Veröffentlicht am 26/08/2009 um 23:06
quelle vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
3

Nun, ich glaube nicht, die Bilanz eine Kaskade haben sollte = „all“ auf dem Künstler.

Das Problem ist, dass Sie auf dem Künstler löschen aufrufen und wenn Sie den Datensatz speichern wird es versuchen, den Künstler neu zu speichern (wegen der Kaskade). Daraus ergibt sich die Fehler :).

Da Sie auf der Aufzeichnung des Künstlers Eigenschaft nicht null haben, sollten Sie keinen Künstler, löschen, aber die Record löschen und die Künstler sollten automatisch gelöscht werden.

Beantwortet am 27/08/2009 um 05:11
quelle vom benutzer

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