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); } }
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); } }