public static void AddRankedCity(int rankingId, int cityId)
    {
        using (var db = new DatabaseContext())
        {
            if (db.RankingMembers.Any(r => r.CityInfoId == cityId && r.RankingId == rankingId))
            {
                // City is already being ranked.
                return;
            }

            CityInfo city = getCity(cityId, db);

            RankingMember newRankingMember = new RankingMember
            {
                RankingId = rankingId,
                CityInfoId = cityId,
                Score = 0.0,
                User = city.User
            };
            db.RankingMembers.Add(newRankingMember);

            db.SaveChanges();
        }
    }
    private static RankingMember scoreCity(RankingMember rankingMember, CityInfo city, string formula, DatabaseContext db)
    {
        FormulaScore.FormulaScore scorer = new FormulaScore.FormulaScore();
        scorer.ScoringFormula = formula;

        // Load scoring values into scorer.
        List<string> scoringIdentifiers = FormulaScore.FormulaScore.FetchScoringIDs(formula);
        double value;
        foreach (string scoringId in scoringIdentifiers)
        {
            if (GetCityValue.IsValueIdentifier(scoringId, db))
            {
                value = GetCityValue.GetValue(scoringId, city, db);
                scorer.AddScoringValue(scoringId, value);
            }
        }

        rankingMember.Score = Math.Round(scorer.CalculateScore(), 0);
        rankingMember.DetailedScoring = scorer.GetFormulaWithValues();

        return rankingMember;
    }