public async void AddServerRole()
        {
            var serverRoleDto = new ServerRoleDto
            {
                ServerId       = SetupManager.Instance.ServerId,
                ServerIP       = SetupManager.Instance.IPAddress,
                ServerName     = Environment.MachineName,
                ServerRoleEnum = ServerRoleEnum.Database,
                IsActive       = true
            };

            try
            {
                using (var context = new SqlDbContext(Main.ConnectionInfo.ConnectionString))
                {
                    var oldRoles = context.ServerRoles.Where(x => x.ServerRoleEnum == ServerRoleEnum.Database && x.IsActive == true).ToList();
                    if (oldRoles.Count == 0)
                    {
                        context.ServerRoles.Add(serverRoleDto);
                        await context.SaveChangesAsync();
                    }
                    else if (oldRoles.Count == 1)
                    {
                        oldRoles.First().IsActive = false;
                        context.Entry(oldRoles.First()).State = System.Data.Entity.EntityState.Modified;

                        context.ServerRoles.Add(serverRoleDto);

                        await context.SaveChangesAsync();
                    }
                    else if (oldRoles.Count > 1)
                    {
                        var toDelete = oldRoles.Take(oldRoles.Count - 1).ToList();
                        foreach (var item in toDelete)
                        {
                            item.IsActive             = false;
                            context.Entry(item).State = System.Data.Entity.EntityState.Modified;
                        }

                        oldRoles.Last().ServerId       = serverRoleDto.ServerId;
                        oldRoles.Last().ServerIP       = serverRoleDto.ServerIP;
                        oldRoles.Last().ServerName     = serverRoleDto.ServerName;
                        oldRoles.Last().ServerRoleEnum = serverRoleDto.ServerRoleEnum;
                        context.Entry(oldRoles.Last()).State = System.Data.Entity.EntityState.Modified;

                        await context.SaveChangesAsync();
                    }
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"Error occured EnsureDatabase.");
                TxtErrorNotAdded.Visibility = Visibility.Visible;
            }
        }
        public async Task <bool> AddIndexerRole()
        {
            var serverRoleDto = new ServerRoleDto
            {
                ServerId       = ComputerHelper.Instance.ServerId,
                ServerIP       = ComputerHelper.Instance.IPAddress,
                ServerName     = Environment.MachineName,
                ServerRoleEnum = ServerRoleEnum.Indexer,
                IsActive       = true
            };

            return(await AddServerRoleInner(ServerRoleEnum.Indexer, serverRoleDto));
        }
        public async Task <bool> AddDatabaseRole(string serverId, string ipAddress, string machineName)
        {
            var serverRoleDto = new ServerRoleDto
            {
                ServerId       = serverId,
                ServerIP       = ipAddress,
                ServerName     = machineName,
                ServerRoleEnum = ServerRoleEnum.Database,
                IsActive       = true
            };

            return(await AddServerRoleInnerAllowOne(ServerRoleEnum.Database, serverRoleDto));
        }
        private async Task <bool> AddServerRoleInner(ServerRoleEnum serverRoleEnum, ServerRoleDto serverRoleDto)
        {
            try
            {
                using (var context = new SqlDbContext(DatabaseHelper.Instance.ConnectionInfo.ConnectionString))
                {
                    var oldRoles = await context.ServerRoles.Where(x => x.ServerRoleEnum == serverRoleEnum && x.IsActive == true).ToListAsync();

                    if (oldRoles.Count == 0)
                    {
                        context.ServerRoles.Add(serverRoleDto);
                        await context.SaveChangesAsync();
                    }
                    else
                    {
                        if (oldRoles.Count(x => x.ServerId == serverRoleDto.ServerId && x.ServerRoleEnum == serverRoleEnum) > 0)
                        {
                            return(false);
                        }
                        else
                        {
                            context.ServerRoles.Add(serverRoleDto);
                            await context.SaveChangesAsync();
                        }
                    }

                    await GetRoles();

                    NotifyPropertyChanged("");

                    return(true);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"Error occured EnsureDatabase.");
            }

            return(false);
        }
        //public async Task<bool> AddServerRole(ServerRoleEnum serverRoleEnum)
        //{
        //    if (DatabaseHelper.Instance.Status == DatabaseHelperStatusEnum.CelsusDatabaseVersionOk)
        //    {

        //    }
        //    else
        //    {
        //        return false;
        //    }

        //    var serverRoleDto = new ServerRoleDto
        //    {
        //        ServerId = ComputerHelper.Instance.ServerId,
        //        ServerIP = ComputerHelper.Instance.IPAddress,
        //        ServerName = Environment.MachineName,
        //        ServerRoleEnum = serverRoleEnum,
        //        IsActive = true
        //    };

        //    return await AddServerRoleInner(serverRoleEnum, serverRoleDto);

        //}

        private async Task <bool> AddServerRoleInnerAllowOne(ServerRoleEnum serverRoleEnum, ServerRoleDto serverRoleDto)
        {
            try
            {
                using (var context = new SqlDbContext(DatabaseHelper.Instance.ConnectionInfo.ConnectionString))
                {
                    var oldRoles = await context.ServerRoles.Where(x => x.ServerRoleEnum == serverRoleEnum && x.IsActive == true).ToListAsync();

                    if (oldRoles.Count == 0)
                    {
                        context.ServerRoles.Add(serverRoleDto);
                        await context.SaveChangesAsync();
                    }
                    else if (oldRoles.Count == 1)
                    {
                        oldRoles.First().IsActive = false;
                        context.Entry(oldRoles.First()).State = System.Data.Entity.EntityState.Modified;

                        context.ServerRoles.Add(serverRoleDto);

                        await context.SaveChangesAsync();
                    }
                    else if (oldRoles.Count > 1)
                    {
                        var toDelete = oldRoles.Take(oldRoles.Count - 1).ToList();
                        foreach (var item in toDelete)
                        {
                            item.IsActive             = false;
                            context.Entry(item).State = System.Data.Entity.EntityState.Modified;
                        }

                        oldRoles.Last().ServerId       = serverRoleDto.ServerId;
                        oldRoles.Last().ServerIP       = serverRoleDto.ServerIP;
                        oldRoles.Last().ServerName     = serverRoleDto.ServerName;
                        oldRoles.Last().ServerRoleEnum = serverRoleDto.ServerRoleEnum;
                        context.Entry(oldRoles.Last()).State = System.Data.Entity.EntityState.Modified;

                        await context.SaveChangesAsync();
                    }

                    await GetRoles();

                    NotifyPropertyChanged("");

                    return(true);
                }
            }
            catch (Exception ex)
            {
                logger.Error(ex, $"Error occured EnsureDatabase.");
            }

            return(false);
        }