public async Task PatchOrder_patches_order_via_test_context() { var context = new CGC.DH.Order.API.Models.TestContext(); context.Orders = new CGC.DH.Order.API.Models.TestDbSetOrder() as DbSet<CGC.DH.Order.API.Models.Order>; context.Orders.Add(new CGC.DH.Order.API.Models.Order { OrderID = 1, MobileNumber = "123-123-1234", PickUpName = "ZZZ" }); var service = new CGC.DH.Order.API.Controllers.OrdersController(context); service.Request = new HttpRequestMessage(); service.Configuration = new HttpConfiguration(); var delta = new System.Web.OData.Delta<CGC.DH.Order.API.Models.Order>(); delta.TrySetPropertyValue("PickUpName", "ChangedName"); delta.TrySetPropertyValue("MobileNumber", "111-111-1111"); var patchedOrder = await service.Patch(1, delta); Assert.AreEqual(1, context.Orders.Count()); Assert.AreEqual("ChangedName", context.Orders.Single().PickUpName); Assert.AreEqual("111-111-1111", context.Orders.Single().MobileNumber); Assert.AreEqual(1, context.SaveChangesAsyncCount); }
public static void Patch <TEntityType>(this System.Web.OData.Delta <TEntityType> d, TEntityType original, String[] includedProperties, String[] excludedProperties) where TEntityType : class { Dictionary <string, PropertyAccessor <TEntityType> > _propertiesThatExist = InitializePropertiesThatExist <TEntityType>(); var changedProperties = d.GetChangedPropertyNames(); if (includedProperties != null) { changedProperties = changedProperties.Intersect(includedProperties); } if (excludedProperties != null) { changedProperties = changedProperties.Except(excludedProperties); } PropertyAccessor <TEntityType>[] array = ( from s in changedProperties select _propertiesThatExist[s]).ToArray(); var array2 = array; for (int i = 0; i < array2.Length; i++) { PropertyAccessor <TEntityType> propertyAccessor = array2[i]; propertyAccessor.Copy(d.GetEntity(), original); } }