Esempio n. 1
0
        //Update Movie
        public static void UpdateMovieByTitolo()
        {
            CinemaDataContext db = new CinemaDataContext(connectionString);

            Console.WriteLine("Dimmi il titolo del film da aggiornare: ");
            string titolo;

            titolo = Console.ReadLine();

            //Query
            IQueryable <Movy> filmByTitolo =
                from film in db.Movies
                where film.Titolo == titolo
                select film;

            Console.WriteLine("I film trovati sono: {0}", filmByTitolo.Count());

            if (filmByTitolo.Count() == 0)
            {
                return;
            }
            if (filmByTitolo.Count() > 1)
            {
                return;
            }

            SelectMovies();

            Console.WriteLine("Scrivere i valori aggiornati:");
            Console.WriteLine("Titolo: ");
            string title = Console.ReadLine();

            Console.WriteLine("Genere: ");
            string genere = Console.ReadLine();

            Console.WriteLine("Durata: ");
            int durata = Convert.ToInt32(Console.ReadLine());

            foreach (var f in filmByTitolo)
            {
                f.Titolo = title;
                f.Genere = genere;
                f.Durata = durata;
            }

            //Gestione concorrenza
            try
            {
                Console.WriteLine("Premi un tasto per mandare modifiche al db");
                Console.ReadKey();
                db.SubmitChanges(ConflictMode.FailOnFirstConflict); //gestione di come mandare le eccezioni
            }
            catch (ChangeConflictException e)
            {
                Console.WriteLine("Concurrency error: ");
                Console.WriteLine(e.Message);
                Console.ReadKey();

                //OverwriteCurrentValues->ignora le mie modifiche(aggiorna il mio obj model)
                //KeepCurrentValues->ignora le modifiche altrui(sovrascrive il db con il mio obj model)
                //KeepChanges->cerca di tenere entrambe le modifiche
                db.ChangeConflicts.ResolveAll(RefreshMode.OverwriteCurrentValues);

                db.SubmitChanges(); //da fare sempre
            }
        }