NH Save

49 views
Skip to first unread message

save2king

unread,
Feb 13, 2014, 3:54:47 AM2/13/14
to nh...@googlegroups.com
Buongiorno a tutti,
ho un problema che mi assilla da anni e non sono mai riuscito a risolvere con NH.
Provo a descrivere il problema e situazione che mi si presenta:

La soluzione .net si divide in:
- Model dove ci sono le mie entità mappate tramite loquacious
- NHSqlServer dove mi scrivo la logica con delle classi wrapper che mi gestiscono la session factory, transazioni, etc.
- Core dove ci sono i miei servizi wcf con sessionfactory configurata con contesto NHibernate.Context.WcfOperationSessionContext.

Il problema è il seguente:
Ho un'entity con ID complex composto da ID (string) + Data (datetime) ora nella mia procedura lato wcf la prima cosa che faccio è fare una get in sessione per poter leggere l'entità poi la lavoro e in un caso specifico devo cambiargli la Data chiave primaria e fargli un insert sul db con ID quello letto in precedenza con Data diversa.
Provo con un evict, provo a non fare flush, provo a fare un clone, tutte le strade mi portano a fargli interpretare ad NH che l'inserimento con un session.Save (esplicito) è un update, cioè sembra che NH non gli interessi che è esplicitamente cambiata una PK e invece di fare un insert mi fà un update.

Dove sbaglio?
Grazie,
Salvatore

Pietro Ianniello

unread,
Feb 13, 2014, 6:02:18 AM2/13/14
to nh...@googlegroups.com
La domanda è: come faresti senza NHibernate?
Ovvero: si può in generale cambiare la chiave primaria?
Ci sono tabelle correlate con chiavi esterne dipendenti?

La risponsta migliore è usare una chiave primaria diversa (surrogate PK), vedi: https://stackoverflow.com/questions/2499246/how-to-update-primary-key

Inoltre, puoi impostare a livello del DB un vincolo di unicità, se questo è lo scopo.

Pietro Ianniello


--
--
Per mandare un messaggio a questo gruppo, invia una email a nh...@googlegroups.com
Per annullare l'iscrizione a questo gruppo, invia un'email a nh-it-un...@googlegroups.com
Per maggiori opzioni, visita questo gruppo all'indirizzo http://groups.google.com/group/nh-it?hl=it
---
Hai ricevuto questo messaggio perché sei iscritto al gruppo "NHibernate-It" di Google Gruppi.
Per annullare l'iscrizione a questo gruppo e non ricevere più i suoi messaggi, invia un'email a nh-it+un...@googlegroups.com.
Per ulteriori opzioni, visita https://groups.google.com/groups/opt_out.



--
Clausola di riservatezza: Le informazioni contenute in questo messaggio di posta elettronica e gli eventuali documenti allegati sono riservate e confidenziali ad uso esclusivo del destinatario e ne è vietata la diffusione e la riproduzione in qualunque modo eseguita. Qualora Lei non fosse la persona a cui il presente messaggio è destinato, La invito ad eliminarlo ed a non leggerlo, dandone gentilmente comunicazione al mittente. I Dati sono trattati in accordo al D.lgs n° 196 del 30.06.2003 “Codice in materia dei dati personali”
Reply all
Reply to author
Forward
0 new messages