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); }
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); }