示例#1
0
        private void AddPoliticalEntity(GoldReservesDbContext context, string name)
        {
            var p = context.GetPoliticalEntity(name);

            if (p != null)
            {
                throw new ArgumentException();
            }
            p = new PoliticalEntity();
            var pen = new PoliticalEntityName();

            pen.LanguageId      = GoldReservesDbContext.LanguageId_English;
            pen.PoliticalEntity = p;
            pen.Name            = name;
            context.PoliticalEntities.Add(p);
            context.PoliticalEntityNames.Add(pen);
            context.SaveChanges();
            context.Entry(p).State   = EntityState.Detached;
            context.Entry(pen).State = EntityState.Detached;
        }
示例#2
0
        public void InitializeDatabase(GoldReservesDbContext context)
        {
            bool exists;

            if (exists = context.Database.Exists())
            {
                bool recreateAlways = false;
#if DEBUG
                string recreateAlwaysSetting = ConfigurationManager.AppSettings["GoldReservesDbRecreateAlways"];
                if (recreateAlwaysSetting == null || !bool.TryParse(recreateAlwaysSetting, out recreateAlways))
                {
                    recreateAlways = false;
                }
#endif
                if (!recreateAlways && context.Database.CompatibleWithModel(false))
                {
                    return;
                }
                context.Database.Delete();
                exists = false;
            }
            if (!exists)
            {
                context.Database.Create();
                context.InitializeAndSeed();
            }
            bool ex = true;
            try
            {
                var path = HostingEnvironment.MapPath("~/Content/geoRegionsTopoJson.json");
                using (var fileStream = new FileStream(
                           path,
                           FileMode.Open,
                           FileSystemRights.ReadData,
                           FileShare.Read,
                           4096,
                           FileOptions.SequentialScan))
                    using (var textReader = new StreamReader(fileStream, Encoding.UTF8, false, 1024, true))
                        using (var jsonReader = new JsonTextReader(textReader))
                        {
                            var jsonSer = new JsonSerializer();
                            jsonSer.Converters.Add(new Newtonsoft.Json.Converters.ExpandoObjectConverter());
                            dynamic topology     = jsonSer.Deserialize <ExpandoObject>(jsonReader);
                            var     geometries_d = topology.objects.units.geometries as List <object>;
                            foreach (dynamic geometry_d in geometries_d)
                            {
                                var g = new GeoRegion();
                                g.Id_Alpha3 = geometry_d.id;
                                string geometry_d_props_name = geometry_d.properties.name;
                                var    p = context.GetPoliticalEntity(geometry_d_props_name);
                                if (p != null)
                                {
                                    throw new NotImplementedException();
                                }
                                p           = new PoliticalEntity();
                                p.GeoRegion = g;
                                context.GeoRegions.Add(g);
                                context.PoliticalEntities.Add(p);
                                var pen = new PoliticalEntityName();
                                pen.LanguageId      = GoldReservesDbContext.LanguageId_English;
                                pen.PoliticalEntity = p;
                                pen.Name            = geometry_d_props_name;
                                context.PoliticalEntityNames.Add(pen);
                                context.SaveChanges();
                                context.Entry(g).State   = EntityState.Detached;
                                context.Entry(p).State   = EntityState.Detached;
                                context.Entry(pen).State = EntityState.Detached;
                            }
                        }

                ImportPoliticalEntities(context);
                ImportPoliticalEntityAliases(context);
                ex = false;
            }
            finally
            {
                if (ex)
                {
                    try
                    {
                        context.Database.Delete();
                    }
                    catch
                    {
                    }
                }
            }
        }