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; }
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 { } } } }