NHibernate.ObjectDeletedException

hlasů
1

Potřebuji pomoc přijít na to, jak postupovat. Stavím aplikaci pro správu sbírky vinylů a mám následující mapování.

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

Chci mnoho záznamů mapovat na jeden umělec, a to funguje v pohodě. Ale já jsem se potýkají s problémy, když se snažím odstranit záznam. Co bych chtěl udělat, je:

Odstranit záznam a umělce, jsou-li žádné jiné záznamy připojené k tomuto umělce. Pokud existují záznamy spojené s umělcem, stačí odstranit záznam.

Vzhledem k současné mapování dostanu následující chybu, když jsem volat session.Delete (záznam) ;:

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

Tady je to, co můj DeleteMethod vypadá takto:

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

Co by musím udělat, že to funguje tak, jak jsem si to chcete? Neváhejte uvést zřejmé.

Aktualizovat Myslím, že se ptám, jestli musím zvládnout odstranění umělců ručně?

Položena 26/08/2009 v 23:06
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
3

No, já si nemyslím, že záznam by měl mít kaskády = „all“ na interpreta.

Problém je v tom, že budete volat odstranit na umělců a při uložení záznamu se bude snažit znovu uložit umělce (kvůli kaskády). Proto je chyba :).

Vzhledem k tomu, že ne-null na nahrávce je umělce majetku, neměli byste odstranit umělec, ale odstranit záznam a umělec by měl být automaticky smazány.

Odpovězeno 27/08/2009 v 05:11
zdroj uživatelem

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