Domanda

Carico un contact-objekt dal database.Il contatto dell'oggetto ha una mappatura one-to-molti a contactsecurity:

    <set name="ContactSecuritys" lazy="true" inverse="true" cascade="none" >
        <key>
            <column name="ContactId"/>
        </key>
        <one-to-many class="ContactSecurity"/>
    </set>
.

Ora, provo a fare:

contact.ContactSecuritys.Add(new ContactSecurity(Guid.NewGuid()));
Session.Merge(contact);
.

Ma questo sta lanciando un oggetto transientobjectexcupption 'è un'istanza transitoria non salvata - Salva l'istanza transitoria prima di fusione: Prayon.itties.Contactsecurity'

Ho anche provato

contact.ContactSecuritys.Add(new ContactSecurity(Guid.NewGuid()) {Contact = contact});
Session.Merge(contact);
.

Cosa sto facendo male?- Devo risparmiare extra il nuovo oggetto di sicurezza con contatto di riferimento prima di unire il contatto?- O c'è un modo più semplice per farlo?

Grazie per qualsiasi aiuto.

È stato utile?

Soluzione

I think it because "ContactSecurity" is a new transient object. If an entity with the same identifier has already been persisted, you can use "session.Merge()", but there is no any entity with a such identifier. You may use "session.Persist(ContactSecurity)" to attach a transient object to a Session.

var contactSecurity = new ContactSecurity(Guid.NewGuid());
Session.Persist(contactSecurity);

contact.ContactSecuritys.Add(contactSecurity);
Session.Merge(contact);

In general I don't understand why are you using "session.Merge()". If entity "contact" is a persistent object you can use "session.Flush()" in the end of transaction, and don't call "session.Merge()":

var contactSecurity = new ContactSecurity(Guid.NewGuid());
Session.Persist(contactSecurity);
contact.ContactSecuritys.Add(contactSecurity);
Session.Flush();

Altri suggerimenti

Your problem is not caused by the ContactSecurity. You should change your cascade settings to - cascade="save-update" at least, to allow the main class to update and insert other objects in its properties.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top