private static void ImportMountain(JToken mountainObj)
    {
        var context = new MountainsContext();
        var mountain = new Mountain();

        // Parse mountain
        if (mountainObj["mountainName"] == null)
        {
            throw new Exception("Missing mountain name");
        }
        mountain.Name = mountainObj["mountainName"].Value<string>();

        // Parse peaks
        var peaks = mountainObj["peaks"];
        if (peaks != null)
        {
            foreach (var peak in peaks)
            {
                if (peak["peakName"] == null)
                {
                    throw new Exception("Missing peak name");
                }
                string peakName = peak["peakName"].Value<string>();

                if (peak["elevation"] == null)
                {
                    throw new Exception("Missing peak elevation");
                }
                int elevation = peak["elevation"].Value<int>();

                mountain.Peaks.Add(new Peak() { Name = peakName, Elevation = elevation});
            }
        }

        // Parse countries
        var countryNames = mountainObj["countries"];
        if (countryNames != null)
        {
            foreach (var countryName in countryNames)
            {
                var countryCode =
                    new string(countryName.Value<string>().Take(2).ToArray()).ToUpper();
                var country = context.Countries.Find(countryCode);
                if (country == null)
                {
                    country = new Country() { Code = countryCode, Name = countryName.Value<string>() };
                }
                mountain.Countries.Add(country);
            }
        }

        // Persist the mountain in the database
        context.Mountains.Add(mountain);
        context.SaveChanges();
    }
 static void Main()
 {
     var context = new MountainsContext();
     var mountains = context.Mountains.Select( m =>
         new {
             m.Name,
             Countries = m.Countries.Select(c => c.Name),
             Peaks = m.Peaks.Select(p => new { p.Name, p.Elevation })
         });
     foreach (var mountain in mountains)
     {
         Console.WriteLine(
             "{0}, countries: {1}, peaks: {2}",
             mountain.Name,
             string.Join(", ", mountain.Countries),
             string.Join(", ", mountain.Peaks.Select(
                 p => p.Name + " (elevation " + p.Elevation + ")")));
     }
 }
        static void Main()
        {
            var context   = new MountainsContext();
            var mountains = context.Mountains.Select(m =>
                                                     new {
                m.Name,
                Countries = m.Countries.Select(c => c.Name),
                Peaks     = m.Peaks.Select(p => new { p.Name, p.Elevation })
            });

            foreach (var mountain in mountains)
            {
                Console.WriteLine(
                    "{0}, countries: {1}, peaks: {2}",
                    mountain.Name,
                    string.Join(", ", mountain.Countries),
                    string.Join(", ", mountain.Peaks.Select(
                                    p => p.Name + " (elevation " + p.Elevation + ")")));
            }
        }