public override void Update(AuthorizationTokenChanges changes) { foreach (var planNodeDo in changes.Delete) { Repository.Remove(planNodeDo); } foreach (var planNodeDo in changes.Insert) { var entity = planNodeDo.Clone(); ClearNavigationProperties(entity); Repository.Add(entity); } foreach (var changedObject in changes.Update) { var token = changedObject.Token.Clone(); object entity = Repository.GetByKey(token.Id); foreach (var changedProperty in changedObject.ChangedProperties) { changedProperty.SetValue(entity, changedProperty.GetValue(token)); } } }
public virtual void Update(AuthorizationTokenChanges changes) { var adapter = (IObjectContextAdapter)Uow.Db; var objectContext = adapter.ObjectContext; ObjectStateEntry entry; foreach (var token in changes.Delete) { var entryStub = token.Clone(); ClearNavigationProperties(entryStub); var key = objectContext.CreateEntityKey("AuthorizationTokenDOes", entryStub); if (!objectContext.ObjectStateManager.TryGetObjectStateEntry(key, out entry)) { Repository.Attach(entryStub); entry = objectContext.ObjectStateManager.GetObjectStateEntry(entryStub); entry.Delete(); } else { var planNodeFromObjectContext = objectContext.GetObjectByKey(key); Repository.Remove((AuthorizationTokenDO)planNodeFromObjectContext); } } foreach (var token in changes.Insert) { var entity = token.Clone(); ClearNavigationProperties(entity); Repository.Add(entity); } foreach (var changedObject in changes.Update) { var entryStub = changedObject.Token.Clone(); ClearNavigationProperties(entryStub); var key = objectContext.CreateEntityKey("AuthorizationTokenDOes", entryStub); if (!objectContext.ObjectStateManager.TryGetObjectStateEntry(key, out entry)) { Repository.Attach(entryStub); entry = objectContext.ObjectStateManager.GetObjectStateEntry(entryStub); foreach (var changedProperty in changedObject.ChangedProperties) { if (changedProperty.Name == nameof(AuthorizationTokenDO.Token)) { continue; } entry.SetModifiedProperty(changedProperty.Name); } } else { foreach (var changedProperty in changedObject.ChangedProperties) { if (changedProperty.Name == nameof(AuthorizationTokenDO.Token)) { continue; } changedProperty.SetValue(entry.Entity, changedProperty.GetValue(entryStub)); } } } }