NHibernate.ObjectDeletedException

votos
1

Preciso de ajuda para descobrir como proceder. Estou construindo um aplicativo para gerenciar uma coleção de discos e eu tenho os seguintes mapeamentos.

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

Quero muitos registros para mapear a um artista e isso funciona muito bem. Mas eu correr em apuros quando eu estou tentando excluir um registro. O que eu gostaria de fazer é:

Excluir o registro eo artista se não houver outros registros são ligados a esse artista. Se houver registros relacionados ao artista, basta apagar o registro.

Com o mapeamento atual eu recebo o seguinte erro quando eu chamo Session.delete (registro) ;:

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

Aqui está o que a minha DeleteMethod se parece com:

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

O que eu preciso fazer para tê-lo a trabalhar da maneira que eu quero que ele? Por favor, fique à vontade para afirmar óbvio.

UPDATE Eu acho que eu estou perguntando se eu preciso para lidar com a exclusão de artistas manualmente?

Publicado 26/08/2009 em 23:06
fonte usuário
Em outras línguas...                            


1 respostas

votos
3

Bem, eu não acho que o registo deve ter um cascade = "all" sobre o artista.

O problema é que você chama apagar sobre o artista e quando você salvar o registro que vai tentar voltar a salvar o artista (por causa da cascata). Daí o erro :).

Desde que você tem de não nulo na propriedade do artista da Record, você não deve excluir um artista, mas excluir o registro eo artista deve ser excluído automaticamente.

Respondeu 27/08/2009 em 05:11
fonte usuário

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