Beispiel #1
0
        public void ChangeTracking_EntityCollectionTracking()
        {
            var pc = new PersonCollection();

            pc.TrackChanges();
            Assert.IsTrue(pc.IsChangeTracking);

            var p = new Person {
                FirstName = "Jenny"
            };

            Assert.IsFalse(p.IsChangeTracking);

            // Adding item will not pick up changes made prior to TrackChanges.
            pc.Add(p);
            Assert.IsTrue(pc.IsChanged);
            Assert.IsTrue(p.IsChangeTracking);
            Assert.IsTrue(p.IsChanged);
            Assert.AreEqual(new System.Collections.Specialized.StringCollection(), p.ChangeTracking);

            // Accept changes so no longer tracking anything.
            pc.AcceptChanges();
            Assert.IsFalse(pc.IsChangeTracking);
            Assert.IsFalse(pc.IsChanged);
            Assert.IsFalse(p.IsChangeTracking);
            Assert.IsFalse(p.IsChanged);

            // Track changes again updating only the person name - changes should bubble.
            pc.TrackChanges();
            p.FirstName = "Jennifer";
            Assert.IsTrue(pc.IsChanged);
            Assert.IsTrue(p.IsChanged);
            Assert.AreEqual(new System.Collections.Specialized.StringCollection {
                "FirstName"
            }, p.ChangeTracking);

            // Remove item from collection, changes should no longer bubble.
            pc.AcceptChanges();
            pc.Remove(p);
            pc.AcceptChanges();
            p.FirstName = "Jen";
            Assert.IsFalse(pc.IsChanged);
            Assert.IsTrue(p.IsChanged);
            Assert.IsFalse(p.IsChangeTracking);
        }