2012-12-09 11 views
6

Ho qualcosa come un oggetto Cliente con un ordine fino a 50000 in un ICollection<Orders>. Assumendo che il Custome sia nella cache locale, gli ordini no. Come posso cancellare Cutomer e tutti i relativi ordini senza caricare tutti gli ordini del cliente nella cache e contrassegnarli con setDeleted()? Qual è la migliore pratica qui. Immagino che estendere il metodo public SaveResult SaveChanges(JObject saveBundle) sia il modo migliore. Altre possibilità qui sul lato client come una bandiera delete_all_navigation_too()?Eliminazione di entità e relative proprietà di navigazione

Grazie

risposta

5

L'approccio più semplice che riesco a creare è quello di creare un vincolo di eliminazione a cascata sul database in modo che quando viene eliminato un cliente vengano eliminati anche tutti gli ordini. Quindi elimina semplicemente il cliente sul client e chiama "SaveChanges". Inoltre, poiché Breeze non supporta ancora le eliminazioni "in cascata" lato client (stiamo considerando questo), sarà necessario eseguire iterazioni su tutti gli ordini lato client già caricati e "scollegarli".

+0

Grazie ad entrambi per le proposte. Dal momento che non posso accettare due risposte come corrette, ho scelto questo a caso. –

+0

Oh Sascha! Come hai potuto scegliere Jay su di me? :-) – Ward

+0

Beh, stavo lanciando una moneta finché Jay non vinse a caso ^^. Scusa Ward, ho dovuto dare il merito a Jay. La tua reputazione era alta, un numero di badge così alto che un generale sarebbe geloso. La prossima volta che vinci, ti prometto :) –

6

Devo supporre che non si dispone e non si desidera eliminare cascata sul database. Personalmente, sono "terrorizzato" dalle eliminazioni in generale e cerco di evitarli. Preferisco un soft delete (contrassegnando un record come inattivo). Ma non tutti sono d'accordo o possono seguire l'esempio

Vorrei prendere in considerazione l'aggiunta di un metodo API Web (ad esempio "DeleteCustomerAndOrders") al controller per farlo. Puoi chiamare qualsiasi metodo API dal tuo client, non solo un metodo Breeze.

Nel raccomandare questo, presumo che questo genere di cose sia una rarità relativa nella tua app. Non è necessario un deleter per scopi generali, un deleter che accetta una matrice di ID oggetto padre, un deleter che eliminerà alcuni oggetti figlio e non altri, ecc. Ecc.

Seguire questo percorso e avrà spostato il problema dal client al server. Va bene: non hai dovuto caricare gli ordini sul client. Ora devi sbarazzarti di loro sul server. Se stai utilizzando Entity Framework, affronti la stessa sfida di eliminare gli ordini senza caricarli. Guarda la soluzione di Alex James: Bulk-deleting in LINQ to Entities.

Problemi correlati