Sono alle prese con un problema correlato a NHibernate in cui è possibile utilizzare alcuni input.Come mantenere un sottoinsieme di un oggetto invece dell'intero oggetto?
Introduzione:
Ho un database legacy qualora non siano realmente stati applicati i concetti relazionali.
Nel database ho una tabella OrderLine
che contiene i dati per le righe di un ordine.
Inoltre, la tabella contiene anche tutte le colonne con informazioni specifiche su Order
. Questo potrebbe ad esempio essere il numero d'ordine di un cliente.
E.x. Se ho 10 righe di ordine, ho 10 righe nella mia tabella OrderLines
e ogni riga ha tutti i dati specifici Order
, ad es. numero d'ordine o informazioni sul cliente.
Io non voglio avere la struttura di cui sopra nel mio codice in modo da vista è stato creato per Orders
in modo che potessi mappa La mia Order
in NHibernate che poi ha un insieme/sacchetto di OrderLines
che rende molto più senso.
Mapping: (semplificato)
<class name="Order" table="[view_Orders]">
<bag name="OrderLines">
</class>
<class name="OrderLine" table="OrderLines" />
Il problema:
La complessità della vista rende impossibile per salvare la vista. Quando si cerca NHibernates genera questa eccezione:
NHibernate.Exceptions.GenericADOException: non poteva inserire: XXX ---> System.Data.SqlClient.SqlException: Visualizza o 'view_Orders' funzione non è aggiornabile perché la modifica interessa più tabelle di base.
mappatura mio NHibernate è costruito come un oggetto Order
che ha un "sacco impostare o" di OrderLine
oggetti. Idealmente mi piacerebbe che NHibernate mantenga il set di oggetti OrderLine
invece dell'intero oggetto.
C'è un modo per raggiungere questo obiettivo? Ho provato a bloccare l'oggetto utilizzando diverse modalità di blocco, ma non mi ha aiutato.
Sembra che quello che stai cercando di fare dovrebbe funzionare. L'eccezione indica che NHibernate sta tentando di eseguire un UPDATE contro l'entità Ordine che è mappata a una vista non aggiornabile. NHibernate lo farà solo se ritiene che l'entità sia sporca, al di fuori delle raccolte OrderLines. Dovresti controllare le tue altre proprietà mappate. E forse prova ad usare un profiler come NHProf per vedere cosa sta cambiando. –
Esattamente. Mi piacerebbe NON aggiornare il mio ordine perché è mappato a una vista non aggiornabile. Invece vorrei solo aggiornare l'oggetto figlio, ad es.la borsa di OrderLines. Ho usato NHProfiler e l'eccezione da sopra è fondamentalmente un'eccezione SQL che viene passata attraverso NHibernate. – JuniorCoder