From 91dbf3f1eefb79bd02c870ebe4ae8aa7ce8736db Mon Sep 17 00:00:00 2001 From: Alexander Zabluda Date: Wed, 8 Apr 2015 20:34:19 +0200 Subject: [PATCH 1/2] Unit test 'MergeChanges_Should_Set_TrackingState_To_Unchanged_For_Added_Order_With_Null_Customer' fails for derived Order --- .../NorthwindModels/PriorityOrder.cs | 21 +++++++++++++++++++ ...kableEntities.Client.Tests.Entities.csproj | 1 + .../ChangeTrackingExtensionsTests.cs | 3 ++- 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 Source/Tests/TrackableEntities.Client.Tests.Entities/NorthwindModels/PriorityOrder.cs diff --git a/Source/Tests/TrackableEntities.Client.Tests.Entities/NorthwindModels/PriorityOrder.cs b/Source/Tests/TrackableEntities.Client.Tests.Entities/NorthwindModels/PriorityOrder.cs new file mode 100644 index 00000000..0a0118dd --- /dev/null +++ b/Source/Tests/TrackableEntities.Client.Tests.Entities/NorthwindModels/PriorityOrder.cs @@ -0,0 +1,21 @@ +using System; +using Newtonsoft.Json; + +namespace TrackableEntities.Client.Tests.Entities.NorthwindModels +{ + [JsonObject(IsReference = true)] + public class PriorityOrder : Order + { + private string _priorityPlan; + public string PriorityPlan + { + get { return _priorityPlan; } + set + { + if (value == _priorityPlan) return; + _priorityPlan = value; + NotifyPropertyChanged(() => PriorityPlan); + } + } + } +} diff --git a/Source/Tests/TrackableEntities.Client.Tests.Entities/TrackableEntities.Client.Tests.Entities.csproj b/Source/Tests/TrackableEntities.Client.Tests.Entities/TrackableEntities.Client.Tests.Entities.csproj index 7fbc899b..243b33f0 100644 --- a/Source/Tests/TrackableEntities.Client.Tests.Entities/TrackableEntities.Client.Tests.Entities.csproj +++ b/Source/Tests/TrackableEntities.Client.Tests.Entities/TrackableEntities.Client.Tests.Entities.csproj @@ -53,6 +53,7 @@ + diff --git a/Source/Tests/TrackableEntities.Client.Tests.Extensions/ChangeTrackingExtensionsTests.cs b/Source/Tests/TrackableEntities.Client.Tests.Extensions/ChangeTrackingExtensionsTests.cs index 23eb9e3c..924f7d7a 100644 --- a/Source/Tests/TrackableEntities.Client.Tests.Extensions/ChangeTrackingExtensionsTests.cs +++ b/Source/Tests/TrackableEntities.Client.Tests.Extensions/ChangeTrackingExtensionsTests.cs @@ -122,8 +122,9 @@ public void MergeChanges_Should_Set_TrackingState_To_Unchanged_For_Added_Order_W { // Arrange var database = new MockNorthwind(); - var origOrder = new Order + var origOrder = new PriorityOrder { + PriorityPlan = "Silver", OrderDate = DateTime.Parse("1996-07-04"), CustomerId = "ALFKI" }; From 890b23a12f031f5e37638368d3fc499148043ed0 Mon Sep 17 00:00:00 2001 From: Alexander Zabluda Date: Wed, 8 Apr 2015 21:06:20 +0200 Subject: [PATCH 2/2] SetEntityProperties must look into base classes when reflecting entity's properties This fixes unit test 'MergeChanges_Should_Set_TrackingState_To_Unchanged_For_Added_Order_With_Null_Customer' --- Source/TrackableEntities.Client/ChangeTrackingExtensions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Source/TrackableEntities.Client/ChangeTrackingExtensions.cs b/Source/TrackableEntities.Client/ChangeTrackingExtensions.cs index 36b80596..ddd58c09 100644 --- a/Source/TrackableEntities.Client/ChangeTrackingExtensions.cs +++ b/Source/TrackableEntities.Client/ChangeTrackingExtensions.cs @@ -221,7 +221,7 @@ private static void SetEntityProperties(this ITrackable targetItem, ITrackable s #if SILVERLIGHT || NET40 foreach (var prop in targetItem.GetType().GetProperties().Where(p => p.CanWrite) #else - foreach (var prop in targetItem.GetType().GetTypeInfo().DeclaredProperties + foreach (var prop in targetItem.GetType().BaseTypes().SelectMany(t => t.GetTypeInfo().DeclaredProperties) .Where(p => p.CanWrite && !p.GetMethod.IsPrivate) #endif .Except(targetItem.GetNavigationProperties(false).Select(np => np.Property)))