Пример #1
0
        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));
                    }
                }
            }
        }