private static void ModifyIfNeeded( AMSDbContext connect, MYOBSupplierAddress existingAddress, string propertyName, string oldValue, string newValue) { if (oldValue == null && newValue == null) { return; } if (oldValue == newValue) { return; } var entry = connect.Entry(existingAddress); entry.Property(propertyName).CurrentValue = newValue; entry.Property(propertyName).IsModified = true; }
private static void SyncAddresses(AMSDbContext connect, MYOBSupplier jtItem, Supplier item) { foreach (var a in jtItem.Addresses) { a.TaggedToDelete = true; } if (item.Addresses != null) { foreach (var address in item.Addresses) { var addresses = jtItem.Addresses.AsQueryable(); var tempAddress = address; var existingAddresses = addresses.Where(x => x.Location == tempAddress.Location).ToArray(); if (existingAddresses.Count() == 1) { var existingAddress = existingAddresses[0]; ModifyIfNeeded( connect, existingAddress, "ContactName", existingAddress.ContactName, tempAddress.ContactName); ModifyIfNeeded(connect, existingAddress, "Street", existingAddress.Street, tempAddress.Street); ModifyIfNeeded(connect, existingAddress, "City", existingAddress.City, tempAddress.City); ModifyIfNeeded(connect, existingAddress, "State", existingAddress.State, tempAddress.State); ModifyIfNeeded( connect, existingAddress, "Postcode", existingAddress.Postcode, tempAddress.PostCode); ModifyIfNeeded( connect, existingAddress, "Country", existingAddress.Country, tempAddress.Country); ModifyIfNeeded(connect, existingAddress, "Email", existingAddress.Email, tempAddress.Email); ModifyIfNeeded(connect, existingAddress, "Phone1", existingAddress.Phone1, tempAddress.Phone1); ModifyIfNeeded(connect, existingAddress, "Phone2", existingAddress.Phone2, tempAddress.Phone2); ModifyIfNeeded(connect, existingAddress, "Fax", existingAddress.Phone2, tempAddress.Fax); ModifyIfNeeded(connect, existingAddress, "WebSite", existingAddress.Phone2, tempAddress.Website); existingAddress.TaggedToDelete = false; if (existingAddress.ContactName != tempAddress.ContactName) { existingAddress.ContactName = tempAddress.ContactName; connect.Entry(existingAddress).State = EntityState.Modified; } } else { foreach (var duplAddress in existingAddresses) { duplAddress.TaggedToDelete = true; } if (!string.IsNullOrEmpty(address.Street)) { var newAddress = new MYOBSupplierAddress(); HandyFunctions.PopulateMyobAddress(newAddress, address); jtItem.Addresses.Add(newAddress); newAddress.MyobSupplier = jtItem; } } } } var deleteQueue = jtItem.Addresses.Where(x => x.TaggedToDelete).ToArray(); foreach (var a in deleteQueue) { var entry = connect.Entry(a); entry.State = EntityState.Deleted; } }