//Eliminare Record public static void DeleteMovie() { CinemaDataContext db = new CinemaDataContext(conn); SelectMovies(); var deleteMovie = db.Movies.SingleOrDefault(m => m.ID == 10); if (deleteMovie != null) { db.Movies.DeleteOnSubmit(deleteMovie); } try { db.SubmitChanges(); //inserimento nel databse } catch (Exception e) { Console.WriteLine(e); } Console.WriteLine("-----AGGIORNAMENTO FILM-----"); SelectMovies(); }
public static void UpdateMovieByTitolo() { using (CinemaDataContext db = new CinemaDataContext(connectionString)) { Console.WriteLine("\r\nInserire il Titolo del film da aggiornare:\r\n "); string titolo = Console.ReadLine(); // cerco con query IQueryable <Movy> filmByTitolo = from film in db.Movies where film.Titolo == titolo select film; Console.WriteLine("I film trovati sono {0}\r\n", filmByTitolo.Count()); if (filmByTitolo.Count() == 0 || filmByTitolo.Count() > 1) { Console.WriteLine("Non ci sono film con questo titolo!"); return; // non prova a fare update esce dal metodo } SelectMovies(); // devo dare valori Console.WriteLine("Inserire i valori aggiornati:\r\n "); Console.WriteLine("Titolo:\r\n"); string Titolo = Console.ReadLine(); Console.WriteLine("Genere:\r\n"); string Genere = Console.ReadLine(); Console.WriteLine("Durata:\r\n"); int Durata = Convert.ToInt32(Console.ReadLine()); // fovrei fare tutti i controlli ma se sono gisuti dovrebbe essere solo 1 foreach (var f in filmByTitolo) { f.Titolo = Titolo; // QUI STO FACENDO IL VERO E PROPRIO CAMBIAMENTO IN OBJECT MODEL //non esiste UPDATE ON SUBMIT f.Genere = Genere; f.Durata = Durata; } // ora devo provare a ricnciliare on db, ma devo gestire eventuale concorrenza try { // forzo a fermarsi per vedere eccezione Console.WriteLine("\r\n Premi un tasto per mandare modifiche a db"); Console.ReadKey(); db.SubmitChanges(ConflictMode.FailOnFirstConflict); // sentro submit changes dico come gestire i conflitti per concorrenza(subito o accumulo eccezione) } catch (ChangeConflictException e) // particolare tipo di eccezione usata per gestire conflitti per concorrenza { Console.WriteLine("Concurrency Error"); Console.WriteLine(e); // possiamo gestire il conflitto in 3 modi; io forzo il db, il db forzame o faccio emrging // trovo queste cose nel datacontext chage conflict db.ChangeConflicts.ResolveAll(RefreshMode.); /// OVERWRITE: aggiorno il mio modello con il database /// KEEP CURRENT VALUES: è giusto il mio object model e sovrascrivo db /// KEEP CHANGE: cerca di mantenere entrambi /// db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues); // ora una volta risolti se aggiorno il db locale ok, altrimenti negli atltri due casi devo mandare modifiche al db db.SubmitChanges(); // lo dò perchè se ho KeepCurrent Values o KeepChange lui sa come risolverlo ma non ho aggiornato database } } }