public async Task PersistWorkflow(WorkflowInstance workflow)
        {
            _mutex.WaitOne();
            try
            {
                var uid            = new Guid(workflow.Id);
                var existingEntity = await Set <PersistedWorkflow>()
                                     .Where(x => x.InstanceId == uid)
                                     .Include(wf => wf.ExecutionPointers)
                                     .ThenInclude(ep => ep.ExtensionAttributes)
                                     .Include(wf => wf.ExecutionPointers)
                                     .AsTracking()
                                     .FirstAsync();

                var persistable = workflow.ToPersistable(existingEntity);
                await SaveChangesAsync();

                Entry(persistable).State = EntityState.Detached;
                foreach (var ep in persistable.ExecutionPointers)
                {
                    Entry(ep).State = EntityState.Detached;

                    foreach (var attr in ep.ExtensionAttributes)
                    {
                        Entry(attr).State = EntityState.Detached;
                    }
                }
            }
            finally
            {
                _mutex.Set();
            }
        }
        public async Task PersistWorkflow(WorkflowInstance workflow)
        {
            lock (this)
            {
                Guid uid            = new Guid(workflow.Id);
                var  existingEntity = Set <PersistedWorkflow>()
                                      .Where(x => x.InstanceId == uid)
                                      .Include(wf => wf.ExecutionPointers)
                                      .ThenInclude(ep => ep.ExtensionAttributes)
                                      .Include(wf => wf.ExecutionPointers)
                                      .ThenInclude(ep => ep.Errors)
                                      .AsTracking()
                                      .First();

                var persistable = workflow.ToPersistable(existingEntity);
                SaveChanges();
                Entry(persistable).State = EntityState.Detached;
                foreach (var ep in persistable.ExecutionPointers)
                {
                    Entry(ep).State = EntityState.Detached;

                    foreach (var attr in ep.ExtensionAttributes)
                    {
                        Entry(attr).State = EntityState.Detached;
                    }

                    foreach (var err in ep.Errors)
                    {
                        Entry(err).State = EntityState.Detached;
                    }
                }
            }
        }
Exemple #3
0
        public async Task <string> CreateNewWorkflow(WorkflowInstance workflow)
        {
            workflow.Id = Guid.NewGuid().ToString();
            var persistable = workflow.ToPersistable();
            var result      = Set <PersistedWorkflow>().Add(persistable);

            SaveChanges();
            Entry(persistable).State = EntityState.Detached;
            return(workflow.Id);
        }
Exemple #4
0
        public async Task PersistWorkflow(WorkflowInstance workflow)
        {
            Guid uid         = new Guid(workflow.Id);
            var  existingKey = Set <PersistedWorkflow>().Where(x => x.InstanceId == uid).Select(x => x.ClusterKey).First();
            var  persistable = workflow.ToPersistable();

            persistable.ClusterKey = existingKey;
            Set <PersistedWorkflow>().Update(persistable);
            SaveChanges();
            Entry(persistable).State = EntityState.Detached;
        }
Exemple #5
0
        public async Task <string> CreateNewWorkflow(WorkflowInstance workflow)
        {
            using (var db = ConstructDbContext())
            {
                workflow.Id = Guid.NewGuid().ToString();
                var persistable = workflow.ToPersistable();
                var result      = db.Set <PersistedWorkflow>().Add(persistable);
                await db.SaveChangesAsync();

                return(workflow.Id);
            }
        }
Exemple #6
0
        public async Task PersistWorkflow(WorkflowInstance workflow)
        {
            using (var db = ConstructDbContext())
            {
                var uid            = new Guid(workflow.Id);
                var existingEntity = await db.Set <PersistedWorkflow>()
                                     .Where(x => x.InstanceId == uid)
                                     .Include(wf => wf.ExecutionPointers)
                                     .ThenInclude(ep => ep.ExtensionAttributes)
                                     .Include(wf => wf.ExecutionPointers)
                                     .AsTracking()
                                     .FirstAsync();

                var persistable = workflow.ToPersistable(existingEntity);

                try
                {
                    await db.SaveChangesAsync();
                }
                catch (DbUpdateConcurrencyException ex)
                {
                    var changeInfo = db.ChangeTracker.Entries()
                                     .Where(t => t.State == EntityState.Modified || t.State == EntityState.Added)
                                     .Select(t => new
                    {
                        Original = t.OriginalValues.Properties.ToDictionary(pn => pn, pn => t.OriginalValues[pn]),
                        Current  = t.CurrentValues.Properties.ToDictionary(pn => pn, pn => t.CurrentValues[pn]),
                    });

                    foreach (var t in changeInfo)
                    {
                        foreach (var p in t.Current)
                        {
                            var current  = p.Value;
                            var original = t.Original[p.Key];

                            if (original != null && current != null)
                            {
                                if (!current.Equals(original))
                                {
                                    // For breakpoint...
                                    var x = 456;
                                }
                            }
                        }
                    }
                }
                catch (Exception e)
                {
                    throw;
                }
            }
        }
        public virtual async Task <string> CreateNewWorkflow(WorkflowInstance workflow)
        {
            workflow.Id = _guidGenerator.Create().ToString();
            var persistable = workflow.ToPersistable();
            //if (AbpSession.UserId.HasValue)
            //{
            //    var userCache = AbpSession.GetCurrentUser();
            //    persistable.CreateUserIdentityName = userCache.FullName;
            //}
            await _workflowRepository.InsertAsync(persistable);

            return(workflow.Id);
        }
        public virtual async Task PersistWorkflow(WorkflowInstance workflow)
        {
            var uid            = new Guid(workflow.Id);
            var existingEntity = await _workflowRepository.GetAll()
                                 .Where(x => x.Id == uid)
                                 .Include(wf => wf.ExecutionPointers)
                                 .ThenInclude(ep => ep.ExtensionAttributes)
                                 .Include(wf => wf.ExecutionPointers)
                                 .AsTracking()
                                 .FirstAsync();

            var persistable = workflow.ToPersistable(existingEntity);
            await CurrentUnitOfWork.SaveChangesAsync();
        }
Exemple #9
0
        public async Task PersistWorkflow(WorkflowInstance workflow)
        {
            using (var db = ConstructDbContext())
            {
                var uid            = new Guid(workflow.Id);
                var existingEntity = await db.Set <PersistedWorkflow>()
                                     .Where(x => x.InstanceId == uid)
                                     .Include(wf => wf.ExecutionPointers)
                                     .ThenInclude(ep => ep.ExtensionAttributes)
                                     .Include(wf => wf.ExecutionPointers)
                                     .AsTracking()
                                     .FirstAsync();

                var persistable = workflow.ToPersistable(existingEntity);
                await db.SaveChangesAsync();
            }
        }
        public async Task <string> CreateNewWorkflow(WorkflowInstance workflow)
        {
            _mutex.WaitOne();
            try
            {
                workflow.Id = Guid.NewGuid().ToString();
                var persistable = workflow.ToPersistable();
                var result      = Set <PersistedWorkflow>().Add(persistable);
                await SaveChangesAsync();

                Entry(persistable).State = EntityState.Detached;
                return(workflow.Id);
            }
            finally
            {
                _mutex.Set();
            }
        }