diff --git a/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs b/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs index 1ce56dca..7f18f24a 100644 --- a/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs +++ b/Source/Tests/TrackableEntities.Client.Tests/ChangeTrackingCollectionTests.cs @@ -152,6 +152,24 @@ public void Added_Employee_After_Tracking_Enabled_Should_Not_Mark_Manually_Added Assert.Equal(TrackingState.Added, employee.TrackingState); Assert.True(employee.Territories.All(t => t.TrackingState == TrackingState.Added)); } + + [Fact] + public void Adding_And_Removing_The_Same_Territory_Should_Not_Keep_Added_Territory_In_Territory_Collection() + { + // Arrange + var database = new MockNorthwind(); + var employee = database.Employees[0]; + var changeTracker = new ChangeTrackingCollection(employee); + + // Act + employee.Territories.Add(database.Territories[4]); + employee.Territories.Remove(database.Territories[4]); + + // Assert + var changes = changeTracker.GetChanges(); + Assert.Equal(0, changes.Count); + Assert.Equal(3, employee.Territories.Count); + } #endregion diff --git a/Source/TrackableEntities.Client/ChangeTrackingCollection.cs b/Source/TrackableEntities.Client/ChangeTrackingCollection.cs index 076ba024..c427f9b3 100644 --- a/Source/TrackableEntities.Client/ChangeTrackingCollection.cs +++ b/Source/TrackableEntities.Client/ChangeTrackingCollection.cs @@ -235,6 +235,7 @@ protected override void RemoveItem(int index) item.SetTracking(false, visitationHelper.Clone(), true); // Mark item and trackable collection properties + bool manyToManyAdded = Parent != null && item.TrackingState == TrackingState.Added; item.SetState(TrackingState.Deleted, visitationHelper.Clone()); // Fire EntityChanged event @@ -242,6 +243,7 @@ protected override void RemoveItem(int index) // Cache deleted item if not added or already cached if (item.TrackingState != TrackingState.Added + && !manyToManyAdded && !_deletedEntities.Contains(item)) _deletedEntities.Add(item); }