예제 #1
0
        public static void rinuncioAlleModifiche(Object entita, LumenEntities dbContext)
        {
            ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;

            if (dbContext.Entry(entita).State == EntityState.Modified)
            {
                objContext.Refresh(RefreshMode.StoreWins, entita);
            }

            if (dbContext.Entry(entita).State == EntityState.Added)
            {
                dbContext.Set(entita.GetType()).Remove(entita);
            }
        }
예제 #2
0
        public void simulaUiStaccando2()
        {
            Carrello         carrello;
            ObjectStateEntry stato;


            using (LumenEntities dbContext = new LumenEntities()) {
                ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
                carrello = dbContext.Carrelli.FirstOrDefault(c => c.venduto == false);

                bool trovato = objContext.ObjectStateManager.TryGetObjectStateEntry(carrello, out stato);
                Assert.IsTrue(trovato);
                Assert.AreEqual(stato.State, EntityState.Unchanged);
            }

            using (LumenEntities dbContext = new LumenEntities()) {
                ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
                bool          isDetached = dbContext.Entry(carrello).State == EntityState.Detached;
                Assert.IsTrue(isDetached);

                // Modifico l'oggetto da staccato
                Random rnd          = new Random();
                int    randomNumber = rnd.Next(0, 9);
                carrello.note = carrello.note + randomNumber.ToString();
            }

            using (LumenEntities dbContext = new LumenEntities()) {
                ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
                bool          isDetached = dbContext.Entry(carrello).State == EntityState.Detached;
                Assert.IsTrue(isDetached);
                var poldo = dbContext.Carrelli.Attach(carrello);
                isDetached = dbContext.Entry(carrello).State == EntityState.Detached;
                Assert.IsFalse(isDetached);

                // Qui non ci devono essere modifiche, perché prima ho modificato l'oggetto quando era staccato.
                int quanti = dbContext.SaveChanges();
                Assert.IsTrue(quanti == 0);
            }


            // -- Ora provo a modificare l'oggetto da attaccato.
            using (LumenEntities dbContext = new LumenEntities()) {
                ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;
                bool          isDetached = dbContext.Entry(carrello).State == EntityState.Detached;
                Assert.IsTrue(isDetached);
                var poldo = dbContext.Carrelli.Attach(carrello);
                isDetached = dbContext.Entry(carrello).State == EntityState.Detached;
                Assert.IsFalse(isDetached);

                // Modifico l'oggetto da attaccato
                Random rnd          = new Random();
                int    randomNumber = rnd.Next(0, 9);
                carrello.note = carrello.note + randomNumber.ToString();

                var tt = dbContext.Entry(carrello);
                Assert.AreEqual(tt.State, EntityState.Modified);
            }


            using (LumenEntities dbContext = new LumenEntities()) {
                ObjectContext objContext = ((IObjectContextAdapter)dbContext).ObjectContext;

                // Provo a salvare l'oggetto staccato e mi deve dare errore.
                int quantiQ = dbContext.SaveChanges();
                Assert.IsTrue(quantiQ == 0);

                // Ora forzo lo stato della entità a modificato

                var poldo = dbContext.Carrelli.Attach(carrello);
                var test2 = dbContext.Entry(carrello);
                Assert.AreEqual(test2.State, EntityState.Unchanged);

                objContext.DetectChanges();
                var test3 = dbContext.Entry(carrello);
                Assert.AreEqual(test3.State, EntityState.Unchanged);

                test3.State = EntityState.Modified;
                int quanti = dbContext.SaveChanges();
                Assert.IsTrue(quanti > 0);
            }
        }