Sto usando Nhibernate (sono un noob completo) e quello che voglio essere in grado di fare è copiare un'entità che viene caricata dal database e salvarla con un nuovo Id. .. qualcuno ha incontrato questa situazione? Qualsiasi aiuto sarebbe molto apprezzato.Come copiare un oggetto con NHibernate
risposta
ho bisogno di fare esattamente questo per una serie molto complessa di oggetti e quello che ho trovato finora è:
NHibernate non è esattamente supporta questa.
Se si tenta di sostituire semplicemente l'ID di un oggetto che hai da una sessione, si otterrà un errore NHibernate: identificatore di un'istanza di stato alterato da < 9ae3868d-17bf-4314-ba0c-4eb3b44b1a2e> a < 2b2b67c6 -a421-48c4-836c-4c27f6481718>
Se la sessione non è più in grado di conoscere gli oggetti recuperati, ovvero se li si sfrutta prima di salvare e svuotare, la semplice modifica degli ID ora funzionerà. Quindi, si potrebbe scrivere codice come questo:
public void CloneStudent(Guid studentId)
{
// Get existing student
Student student = _session.Get<Student>(studentId);
// Copy by reference
Student newStudent = student;
// Reset Id to do quick and dirty clone
newStudent.Id = Guid.NewGuid();
newStudent.Sticker = "D";
// Must evict existing object or Nhibernate will throw object modified error
_session.Evict(student);
// Save new object
_session.Save(newStudent);
_session.Flush();
}
Il problema di questo è se il grafico oggetto ha qualsiasi profondità si deve essere sicuri di sfrattare l'intero set, e quindi potrebbe essere necessario gli originali nella sessione ancora ti devo recuperarli di nuovo. Questo è un mal di testa logistico e produce codice con intenzioni molto oscure e contorte.
Non lo consiglio.
Ciò che è più comunemente fatto è serializzare su un flusso binario e ricostituire questo flusso in un nuovo gruppo di oggetti. Bene, ma funziona solo se i tuoi oggetti sono tutti serializzabili.
Questo non è il caso per me, quello che sto facendo è che ho scritto il codice manuale per creare copie profonde di un oggetto grafico usando i costruttori di copia. Questo è complesso e può anche portare a problemi di manutenzione, ma se gli oggetti non possono essere serializzati ci sono poche alternative migliori.
Spiacente, la copia profonda degli oggetti rimane un'operazione complicata se la serializzazione non è un'opzione.
Basta fare new MyClass()
e copiare tutto tranne l'Id. Puoi usare la riflessione per quello.
- 1. Modo Pythonico di copiare un oggetto iterabile
- 2. Come posso copiare un oggetto immutabile come tupla in Python?
- 3. Come posso clonare/copiare un'istanza di un oggetto in CoffeeScript?
- 4. Come posso copiare in profondità un oggetto DateTime?
- 5. Come "Select" con queryover NHibernate
- 6. NHibernate con Microsoft System.Data.OracleClient
- 7. Come copiare un UIImage?
- 8. Sintassi per definire un filtro NHibernate con Fluent Nhibernate?
- 9. Come mantenere un sottoinsieme di un oggetto invece dell'intero oggetto?
- 10. Come copiare un "dizionario" in Swift?
- 11. NHibernate - Restituire oggetto complesso dalla funzione sql
- 12. Come integrare NHibernate con Lucene.Net
- 13. Come aggiungere NOLOCK con nHibernate?
- 14. Come copiare SKSpriteNode con SKPhysicsBody?
- 15. Errore durante l'utilizzo di AutoMapper per mappare da un oggetto POCO a un oggetto proxy NHibernate
- 16. interrogazione Complesso con NHibernate
- 17. Restituisce un elenco di oggetto digitato tramite CreateSQLQuery in NHibernate
- 18. Posso staccare un oggetto da una sessione di NHibernate?
- 19. Generare database con Nhibernate usando Fluent NHibernate
- 20. Come copiare dati da SQL oggetto di C# modello proprietà
- 21. Come si ottiene il tipo di entità su un oggetto che potrebbe essere un oggetto proxy NHibernate?
- 22. NHibernate: accesso all'ID di un oggetto associato senza pigro caricamento dell'intero oggetto
- 23. Come si copia un oggetto Richiesta con un URL diverso?
- 24. come copiare da un oggetto stringstream ad un altro in C++?
- 25. Come ottenere un risultato distinto con l'API nHibernate e QueryOver?
- 26. Come salvare un bambino con id assegnato in NHibernate
- 27. Come copiare un nodo DOM con listener di eventi?
- 28. Come clonare/copiare un controllo (con controlli figlio) usando asp.net?
- 29. Come clonare/copiare un record SQL con CakePhp?
- 30. Copiare i valori delle proprietà di un altro oggetto con C#
Grazie per i suggerimenti Sisyphus, avevo paura di ciò che hai appena suggerito, ma fortunatamente ho la comodità di avere tutti gli oggetti della mia entità serializzabili. Farò un tentativo e ti faccio sapere come funziona. – PCG