示例#1
0
        private static string NewNumber(INumberedEntity entity, NumberedEntityOption option, IUnitOfWork uow)
        {
            var key = CreateEntityKey(entity, option.Fields, uow);

            uow.AcquireDistributedLock(key);

            var number = option.Start.ToString(CultureInfo.InvariantCulture);

            var numberedEntity = uow.Set <NumberedEntity>().AsNoTracking().FirstOrDefault(a => a.EntityName == key);

            if (numberedEntity == null)
            {
                uow.ExecuteSqlRawCommand(
                    "INSERT INTO [dbo].[NumberedEntity]([EntityName], [NextValue]) VALUES(@p0,@p1)",
                    key,
                    option.Start + option.IncrementBy);
            }
            else
            {
                number = numberedEntity.NextValue.ToString(CultureInfo.InvariantCulture);
                uow.ExecuteSqlRawCommand(
                    "UPDATE [dbo].[NumberedEntity] SET [NextValue] = @p0 WHERE [Id] = @p1 ",
                    numberedEntity.NextValue + option.IncrementBy, numberedEntity.Id);
            }

            if (!string.IsNullOrEmpty(option.Prefix))
            {
                number = option.Prefix + number;
            }

            return(number);
        }
        private string BuildNumber(INumberedEntity entity, NumberedEntityOption option)
        {
            var key = BuildEntityKey(entity, option);

            _uow.AcquireDistributedLock(key);

            var number = option.Start.ToString();

            var numberedEntity = _uow.Set <NumberedEntity>().AsNoTracking().FirstOrDefault(a => a.EntityName == key);

            if (numberedEntity == null)
            {
                _uow.ExecuteSqlCommand(
                    "INSERT INTO [dbo].[NumberedEntity]([EntityName], [NextNumber]) VALUES(@p0,@p1)",
                    key,
                    option.Start + option.IncrementBy);
            }
            else
            {
                number = numberedEntity.NextNumber.ToString();
                _uow.ExecuteSqlCommand(
                    "UPDATE [dbo].[NumberedEntity] SET [NextNumber] = @p0 WHERE [Id] = @p1 ",
                    numberedEntity.NextNumber + option.IncrementBy, numberedEntity.Id);
            }

            if (!string.IsNullOrEmpty(option.Prefix))
            {
                number = option.Prefix + number;
            }

            return(number);
        }
示例#3
0
        private string GenerateNumber(INumberedEntity entity)
        {
            var entityType = entity.GetType();
            var entityName = $"{entityType.FullName}";
            var lockKey    = $"Tenant_{_uow.TenantId}_" + entityName;
            var option     = _options.Value.NumberedEntityMap[entityType];

            _uow.AcquireDistributedLock(lockKey);

            var nextNumber = option.Start.ToString();

            var numberedEntity = _uow.Set <NumberedEntity>().AsNoTracking()
                                 .FirstOrDefault(a => a.EntityName == entityName);

            if (numberedEntity == null)
            {
                _uow.ExecuteSqlCommand(
                    "INSERT INTO [dbo].[NumberedEntity]([EntityName], [NextNumber], [TenantId]) VALUES(@p0,@p1,@p2)",
                    entityName,
                    option.Start + option.IncrementBy, _uow.TenantId);
            }
            else
            {
                nextNumber = numberedEntity.NextNumber.ToString();
                _uow.ExecuteSqlCommand(
                    "UPDATE [dbo].[NumberedEntity] SET [NextNumber] = @p0 WHERE [Id] = @p1 ",
                    numberedEntity.NextNumber + option.IncrementBy, numberedEntity.Id);
            }

            if (!string.IsNullOrEmpty(option.Prefix))
            {
                nextNumber = option.Prefix + nextNumber;
            }

            return(nextNumber);
        }