public void SetInitialData()
        {
            var vehicles = _dataStubs.Vehicles;

            _dbContext.VehicleEncyclopedia.AddRange(vehicles);
            _dbContext.DictionaryNation.AddRange(_dataStubs.Nations);
            _dbContext.DictionaryVehicleType.AddRange(_dataStubs.VehicleTypes);

            _dbContext.AccountInfo.Add(_dataStubs.AccountInfo);

            _dbContext.SaveChanges();

            var accounts = _dbContext.AccountInfo.AsNoTracking().ToList();

            Assert.NotNull(accounts);
            Assert.Equal(1, accounts.Count);
            Assert.Equal(_dataStubs.AccountInfo.AccountId, accounts.Single().AccountId);
            Assert.Equal(_dataStubs.AccountInfo.LastBattleTime, accounts.Single().LastBattleTime);
        }
        public void SetDatabase(ReplicationData replicationData)
        {
            if (_dbContext.AccountInfo.AsNoTracking().Count() != 0)
            {
                throw new ApplicationException("Database is not empty");
            }

            var exPresentAccountTanks = new List <AccountTankStatistics>();

            replicationData.AccountInfoStatistics.ForEach(s => s.AccountInfoStatisticsId        = 0);
            replicationData.AccountClanHistory.ForEach(h => h.AccountClanHistoryId              = 0);
            replicationData.AccountClanInfo.ForEach(c => c.AccountClanInfoId                    = 0);
            replicationData.AccountInfoAchievements.ForEach(c => c.AccountInfoAchievementId     = 0);
            replicationData.AccountInfoTankAchievements.ForEach(c => c.AccountInfoAchievementId = 0);
            replicationData.Frags.ForEach(f => f.FragListItemId = 0);
            replicationData.PresentAccountTanks.ForEach(t =>
            {
                t.PresentAccountTankId = 0;
                var stat = replicationData.AccountTanksStatistics.First(s => s.AccountTankStatisticId == t.AccountTankStatisticId);
                exPresentAccountTanks.Add(new AccountTankStatistics
                {
                    AccountTankStatisticId = stat.AccountTankStatisticId,
                    AccountId = stat.AccountId,
                    TankId    = stat.TankId,
                    BattleLifeTimeInSeconds = stat.BattleLifeTimeInSeconds
                });
            });
            replicationData.AccountTanksStatistics.ForEach(s => s.AccountTankStatisticId = 0);



            try
            {
                _dbContext.Database.BeginTransaction();
                _dbContext.AccountInfo.AddRange(replicationData.AccountInfo);
                _dbContext.AccountInfoStatistics.AddRange(replicationData.AccountInfoStatistics);
                _dbContext.AccountClanHistory.AddRange(replicationData.AccountClanHistory);
                _dbContext.AccountClanInfo.AddRange(replicationData.AccountClanInfo);
                _dbContext.AccountInfoAchievement.AddRange(replicationData.AccountInfoAchievements);
                _dbContext.AccountInfoTankAchievement.AddRange(replicationData.AccountInfoTankAchievements);
                _dbContext.Frags.AddRange(replicationData.Frags);
                _dbContext.AccountTankStatistics.AddRange(replicationData.AccountTanksStatistics);

                _dbContext.SaveChanges();

                foreach (var presentTank in replicationData.PresentAccountTanks)
                {
                    var exAccountTankStat = exPresentAccountTanks
                                            .First(t => t.AccountTankStatisticId == presentTank.AccountTankStatisticId);
                    presentTank.AccountTankStatisticId = _dbContext.AccountTankStatistics
                                                         .Where(t => t.AccountId == exAccountTankStat.AccountId && t.TankId == exAccountTankStat.TankId && t.BattleLifeTimeInSeconds == exAccountTankStat.BattleLifeTimeInSeconds)
                                                         .Select(t => t.AccountTankStatisticId)
                                                         .First();
                    _dbContext.PresentAccountTanks.Add(presentTank);
                }

                _dbContext.SaveChanges();

                _dbContext.Database.CommitTransaction();
            }
            catch (Exception e)
            {
                _logger.LogError(e, "Cannot update database");
                _dbContext.Database.RollbackTransaction();
            }
        }
 private static void PopulateDatabase(BlitzStaticianDbContext dbContext, AccountInfo accountInfo)
 {
     dbContext.AccountInfo.Add(accountInfo);
     dbContext.SaveChanges();
 }
        public async Task SaveAchievements(List <Achievement> achievements)
        {
            await _dbContext.MergeAchievements(achievements);

            _dbContext.SaveChanges();
        }