private void creareNuovoFotografo() { try { if ("*".Equals(nuovoFotografo.id)) { nuovoFotografo.id = (string)fotografiReporitorySrv.getNextId(); } // Salvo nel database fotografiReporitorySrv.addNew(nuovoFotografo); fotografiReporitorySrv.saveChanges(); // Non c'è più bisogno perché mi rinfresco sulla ui tramite un messaggio // Aggiungo alla collezione visuale (per non dover rifare la query) // fotografi.Add( nuovoFotografo ); // Svuoto per nuova creazione istanziaNuovoFotografo(); } catch (Exception ee) { // probabilmente sono state inserite le iniziali doppie (not unique) fotografiReporitorySrv.delete(nuovoFotografo); dialogProvider.ShowError(ErroriUtil.estraiMessage(ee), "Salva Fotografo", null); } }
void salvare() { if (!possoSalvare) { throw new InvalidOperationException("Impossibile salvare in questo momento"); } TEntity entita = null; try { if (collectionView.IsAddingNew) { collectionView.CommitNew(); } if (collectionView.IsEditingItem) { collectionView.CommitEdit(); } entita = (TEntity)collectionView.CurrentItem; switch (status) { case DataEntryStatus.New: entityRepositorySrv.addNew(entita); break; case DataEntryStatus.Edit: // TODO qui occorrerebbe gestire un controllo di concorrenza !!! Per ora salto // entityRepositorySrv.update( ref entita ); break; case DataEntryStatus.Delete: // entityRepositorySrv.delete( entita ); break; case DataEntryStatus.View: break; } passoPrimaDiSalvare(entita); entityRepositorySrv.saveChanges(); _giornale.Debug("salvata entità: " + entita); dialogProvider.ShowMessage("Ok salvataggio riuscito\n" + entita, "Info"); passoDopoSalvato(entita); cambiareStatus(DataEntryStatus.View); } catch (Exception eee) { _giornale.Error("Salvataggio entità " + entita, eee); dialogProvider.ShowError(ErroriUtil.estraiMessage(eee), "ERRORE", null); } }
protected virtual bool cancella(TEntity entita) { bool prosegui = false, esito = false; dialogProvider.ShowConfirmation("L'elemento verrà cancellato in modo definitivo.\nConfermi la cancellazione ?", "Cancellazione", (sino) => { prosegui = sino; }); if (prosegui) { try { if (!collectionView.Contains(entita)) { throw new LumenException("elemento da cancellare non trovato in lista"); } // Prima di rimuovere dall'elenco devo spegnere l'elemento corrente // se non sposto il puntatore all'elemento corrente, non posso poi toglierlo dalla collection osservabile. if (collectionView.CurrentPosition > 0) { collectionView.MoveCurrentToPosition(0); } else { collectionView.MoveCurrentToNext(); } collectionView.Remove(entita); // rimuovo dalla collection entityRepositorySrv.delete(entita); // rimuovo dal database int quanti = entityRepositorySrv.saveChanges(); if (quanti == 1) { esito = true; dialogProvider.ShowMessage("L'elemento è stato cancellato correttamente.", "Cancellazione riuscita"); } else { dialogProvider.ShowError("Cancellati " + quanti + " entità", "Attenzione", null); } } catch (Exception ee) { _giornale.Error(ErroriUtil.estraiMessage(ee), ee); dialogProvider.ShowError(ErroriUtil.estraiMessage(ee), "Cancellazione fallita", null); entityRepositorySrv.refresh(entita); // Devo rileggere lo stato, altrimenti rimane unchanged e mi da sampre errore } } return(esito); }
/// <summary> /// Called on the end of the scope. Disposes the ObjectContext. /// </summary> public void Dispose() { if (!_isDisposed) { try { /* End of scope, so clear the thread static * _currentScope member: */ _currentScope = null; Thread.EndThreadAffinity(); if (_saveAllChangesAtEndOfScope) { // Qui ci potrebbero essere delle eccezioni _dbContext.SaveChanges(); } } catch (Exception ee) { _giornale.Error("Salvataggio sul db fallito: " + ErroriUtil.estraiMessage(ee), ee); throw ee; } finally { // In ogni caso devo chiudere tutto _dbContext.Dispose(); _dbContext = null; _isDisposed = true; _giornale.Debug("-Chiudo Unit-Of-Work"); } } else { _giornale.Warn("Come mai casco qui ?? Impossibile. Debuggare!"); if (System.Diagnostics.Debugger.IsAttached) { System.Diagnostics.Debugger.Break(); } } }
public void Execute(object parameter) { try { _giornale.Debug("Eseguo RelayCommad: " + _execute.Method.ToString() + " parametro=" + parameter); esegui(parameter); if (_afterExecute != null) { _giornale.Debug("RelayCommad invoco after execute"); _afterExecute.Invoke(parameter); } _giornale.Debug("Esecuzione RelayCommad completata: " + _execute.Method.ToString() + " parametro=" + parameter); } catch (OutOfMemoryException ofm) { long memoryPrima = Process.GetCurrentProcess().WorkingSet64; FormuleMagiche.attendiGcFinalizers(); long memoryDopo = Process.GetCurrentProcess().WorkingSet64; _giornale.Error("finita la memoria: prima=" + memoryPrima + " dopo=" + memoryDopo); if (_execute.Target is ViewModelBase) { ViewModelBase viewModel = _execute.Target as ViewModelBase; if (viewModel.dialogProvider != null) { viewModel.dialogProvider.ShowError(ofm.GetType().Name + "\n" + ErroriUtil.estraiMessage(ofm), "Errore imprevisto.", null); } } } catch (Exception ee) { _giornale.Error(_execute.Method.ToString(), ee); if (_execute.Target is ViewModelBase) { ViewModelBase viewModel = _execute.Target as ViewModelBase; if (viewModel.dialogProvider != null) { viewModel.dialogProvider.ShowError(ee.GetType().Name + "\n" + ErroriUtil.estraiMessage(ee), "Errore imprevisto. Consultare il Log", null); } } // per ora non voglio far spaccare il programma altrimenti perdo il lavoro in corso. // anche se concettualmente sarebbe più corretto rilanciare l'errore. // L'unico problema è che non c'è modo di fare un try-catch di un Command. // throw ee; } }
public void carrelloTest() { using (LumenEntities dbContext = new LumenEntities()) { Carrello c1 = new Carrello(); c1.id = Guid.NewGuid(); c1.giornata = DateTime.Today; c1.tempo = DateTime.Now; c1.totaleAPagare = 123m; c1.righeCarrello = new EntityCollection <RigaCarrello>(); _carrelloInserito = c1; // --- RigaCarrello r1 = new RigaCarrello(); r1.fotografia = Costanti.findUnaFotografiaRandom(dbContext); r1.fotografo = r1.fotografia.fotografo; r1.discriminator = RigaCarrello.TIPORIGA_MASTERIZZATA; r1.id = Guid.NewGuid(); r1.prezzoLordoUnitario = new Decimal(20); r1.quantita = 2; r1.prezzoNettoTotale = Decimal.Multiply(r1.prezzoLordoUnitario, r1.quantita); r1.descrizione = "Foto masterizzata"; c1.righeCarrello.Add(r1); _contaMasterizzate++; // --- RigaCarrello r2 = new RigaCarrello(); r2.fotografia = Costanti.findUnaFotografiaRandom(dbContext); r2.discriminator = RigaCarrello.TIPORIGA_STAMPA; r2.id = Guid.NewGuid(); r2.prezzoLordoUnitario = new Decimal(5); r2.quantita = 3; r2.prezzoNettoTotale = Decimal.Multiply(r2.prezzoLordoUnitario, r2.quantita); r2.descrizione = "RicaFotoStampata1"; r2.totFogliStampati = 3; r2.prodotto = Utilita.ottieniFormatoCarta(dbContext, "A4"); r2.fotografo = Utilita.ottieniFotografoMario(dbContext); c1.righeCarrello.Add(r2); _contaStampate++; // --- RigaCarrello r3 = new RigaCarrello(); r3.fotografia = Costanti.findUnaFotografiaRandom(dbContext); r3.discriminator = RigaCarrello.TIPORIGA_STAMPA; r3.id = Guid.NewGuid(); r3.prezzoLordoUnitario = new Decimal(5); r3.quantita = 2; r3.prezzoNettoTotale = Decimal.Multiply(r3.prezzoLordoUnitario, r3.quantita); r3.descrizione = "RicaFotoStampata1"; r3.totFogliStampati = 3; r3.prodotto = Utilita.ottieniFormatoCarta(dbContext, "A4"); r3.fotografo = Utilita.ottieniFotografoMario(dbContext); c1.righeCarrello.Add(r3); _contaStampate++; // --- dbContext.Carrelli.Add(c1); try { dbContext.SaveChanges(); } catch (Exception ee) { String msg = ErroriUtil.estraiMessage(ee); Console.WriteLine(msg); throw ee; } } // Verifico che l'inserimento appena effettuato sia andato bene. queryPolimorficaCorrente(); // provo altre tecniche di query, giusto per sport. queryPolimorficaSql(); queryPolimorfica(); }
public void simulaUiStaccando() { Carrello c3; using (LumenEntities dbContext = new LumenEntities()) { c3 = new Carrello { id = Guid.NewGuid(), giornata = DateTime.Today, tempo = DateTime.Now, totaleAPagare = 123m }; c3.righeCarrello = new EntityCollection <RigaCarrello>(); } // ---------- FormatoCarta formato; using (LumenEntities dbContext = new LumenEntities()) { formato = dbContext.FormatiCarta.FirstOrDefault(); } Fotografia fotografia; using (LumenEntities dbContext = new LumenEntities()) { fotografia = dbContext.Fotografie.FirstOrDefault(); } Fotografo fotografo; using (LumenEntities dbContext = new LumenEntities()) { fotografo = dbContext.Fotografi.FirstOrDefault(); } // ---------- using (LumenEntities dbContext = new LumenEntities()) { RigaCarrello r1 = new RigaCarrello(); r1.discriminator = RigaCarrello.TIPORIGA_STAMPA; r1.id = Guid.NewGuid(); r1.prezzoLordoUnitario = new Decimal(5); r1.quantita = 3; r1.prezzoNettoTotale = Decimal.Multiply(r1.prezzoLordoUnitario, r1.quantita); r1.descrizione = "RicaFotoStampata1"; r1.totFogliStampati = 11; r1.prodotto = formato; r1.fotografo = fotografo; r1.fotografia = fotografia; c3.righeCarrello.Add(r1); } // ---------- using (LumenEntities dbContext = new LumenEntities()) { RigaCarrello r1 = c3.righeCarrello.ElementAt(0); // Riattacco le associazioni altrimeti si spacca (sembra) dbContext.FormatiCarta.Attach(r1.prodotto as FormatoCarta); dbContext.Fotografi.Attach(r1.fotografo); dbContext.Fotografie.Attach(r1.fotografia); dbContext.Carrelli.Add(c3); try { dbContext.SaveChanges(); } catch (DbEntityValidationException ee) { string msg = ErroriUtil.estraiMessage(ee); Console.WriteLine(msg); throw; } } }