Beispiel #1
0
        private async Task EnsureDistributedLockInfrastructureExistsAsync()
        {
            await _db.ExecuteAsync(@"
                if not exists (select schema_name from information_schema.schemata where schema_name = 'Cofoundry')
                begin
	                exec sp_executesql N'create schema Cofoundry'
                end");

            await _db.ExecuteAsync(@"
                if (not exists (select * 
                    from information_schema.tables 
                    where table_schema = 'Cofoundry' 
                    and  table_name = 'DistributedLock'))
                begin
	                create table Cofoundry.DistributedLock (
		                DistributedLockId char(6) not null,
		                [Name] varchar(100) not null,
		                LockingId uniqueidentifier null,
		                LockDate datetime2(7) null,
		                ExpiryDate datetime2(7) null,

		                constraint PK_DistributedLock primary key (DistributedLockId)
	                )
                end");
        }
        public Task UnlockAsync(Guid lockingId)
        {
            var sql = @"
                update Cofoundry.DistributedLock 
                set LockingId = null, LockDate = null, ExpiryDate = null
                where LockingId = @LockingId
                ";

            return(_db.ExecuteAsync(sql, new SqlParameter("LockingId", lockingId)));
        }
        private Task LogUpdateSuccessAsync(string module, int version, string description)
        {
            var sql = @"
	                insert into Cofoundry.ModuleUpdate (Module, [Version], [Description], ExecutionDate) 
	                values (@Module, @Version, @Description, @ExecutionDate)"    ;

            return(_db.ExecuteAsync(sql,
                                    new SqlParameter("Module", module),
                                    new SqlParameter("Version", version),
                                    new SqlParameter("Description", description),
                                    new SqlParameter("ExecutionDate", DateTime.UtcNow)
                                    ));
        }
        public async Task ExecuteAsync(ImportPermissionsCommand command)
        {
            var sb = new StringBuilder();

            foreach (var permission in _permissionRepository.GetAll())
            {
                if (permission is IEntityPermission)
                {
                    var entityDefinition = ((IEntityPermission)permission).EntityDefinition;

                    sb.AppendLine(string.Format("if not exists (select * from Cofoundry.[EntityDefinition] where EntityDefinitionCode = '{0}')", entityDefinition.EntityDefinitionCode));
                    sb.AppendLine("begin");
                    sb.AppendLine(string.Format("insert into Cofoundry.[EntityDefinition] (EntityDefinitionCode, Name) values ('{0}', '{1}')", entityDefinition.EntityDefinitionCode, entityDefinition.Name));
                    sb.AppendLine("end");
                    sb.AppendLine(string.Format("insert into Cofoundry.[Permission] (EntityDefinitionCode, PermissionCode) values ('{0}', '{1}')", entityDefinition.EntityDefinitionCode, permission.PermissionType.Code));
                }
                else
                {
                    sb.AppendLine(string.Format("insert into Cofoundry.[Permission] (PermissionCode) values ('{0}')", permission.PermissionType.Code));
                }
            }

            var sql = sb.ToString();

            using (var scope = _transactionScopeManager.Create(_db))
            {
                await _db.ExecuteAsync(sql);

                await scope.CompleteAsync();
            }
        }
        public async Task ExecuteAsync(UpdateDbCommand command)
        {
            using (var transaction = _transactionScopeManager.Create(_db))
            {
                await RunPreScriptAsync(command);

                var sqlBatches = SqlHelper.SplitIntoBatches(command.Sql);

                foreach (var sqlBatch in sqlBatches)
                {
                    await _db.ExecuteAsync(sqlBatch);
                }

                await transaction.CompleteAsync();
            }
        }
Beispiel #6
0
        /// <summary>
        /// Unlocks the specified distributed lock, freeing it up
        /// for other processes to use.
        /// </summary>
        /// <param name="distributedLock">
        /// The distributed lock entry to unlock. This should be the instance
        /// you received from a call to the LockAsync method.
        /// </param>
        public Task UnlockAsync(DistributedLock distributedLock)
        {
            if (distributedLock == null)
            {
                throw new ArgumentNullException(nameof(distributedLock));
            }

            var sql = @"
                update Cofoundry.DistributedLock 
                set LockingId = null, LockDate = null, ExpiryDate = null
                where LockingId = @LockingId and DistributedLockId = @DistributedLockId
                ";

            return(_db.ExecuteAsync(sql,
                                    new SqlParameter("LockingId", distributedLock.LockedByLockingId),
                                    new SqlParameter("DistributedLockId", distributedLock.DistributedLockId)
                                    ));
        }
        public Task SetDatabaseLockedAsync(bool isLocked)
        {
            var cmd = "update Cofoundry.AutoUpdateLock set IsLocked = @IsLocked";

            return(_db.ExecuteAsync(cmd, new SqlParameter("@IsLocked", isLocked)));
        }