// Used by UI, returns fully initialized DatabaseObjectsGraph public DatabaseObjectsGraph LoadState() { int[][] jaggedArray; DatabaseObject[] symbolTable; // Load using (var ctx = new DependencyGraphContext(_connectionString)) { var vertices = ctx.DatabaseObjectVertices.ToList(); jaggedArray = new int[vertices.Count()][]; for (int i = 0; i < jaggedArray.Length; i++) { var json = vertices[i].AdjacencyListJson; int[] adjencencyList = JsonConvert.DeserializeObject <int[]>(json); jaggedArray[i] = adjencencyList; } symbolTable = GetDatabaseObjectsInternal(ctx); } var g = new Digraph(new Memento <int[][]>(jaggedArray)); var dg = new DatabaseObjectsGraph(new Memento <DatabaseObject[]>(symbolTable), g); return(dg); }
// This may be helpful if only need DatabaseObjects and not graph. public DatabaseObject[] GetDatabaseObjects() { using (var ctx = new DependencyGraphContext(_connectionString)) { return(GetDatabaseObjectsInternal(ctx)); } }
public void Setup() { var configuration = CodeVisionConfigurationSection.Load(); var connectionString = configuration.DependencyGraphConnectionString; _context = new DependencyGraphContext(connectionString); }
public ModulesGraph LoadState() { int[][] jaggedArray; Module[] symbolTable; // Load using (var ctx = new DependencyGraphContext(_connectionString)) { jaggedArray = new int[ctx.ModuleVertices.Count()][]; for (int i = 0; i < jaggedArray.Length; i++) { var json = ctx.ModuleVertices.Find(i).AdjacencyListJson; int[] adjencencyList = JsonConvert.DeserializeObject <int[]>(json); jaggedArray[i] = adjencencyList; } symbolTable = ctx.Modules .ToList() .Select(s => new Module(s.Name, s.Version, s.Description, s.ModuleId)).ToArray(); } var g = new Digraph(new Memento <int[][]>(jaggedArray)); var dg = new ModulesGraph(new Memento <Module[]>(symbolTable), g); return(dg); }
public void SaveState(ModulesGraph dg) { Module[] symbolTable = dg.CreateMemento().State; int[][] jaggedArray = dg.Digraph.CreateMemento().State; // Save using (var ctx = new DependencyGraphContext(_connectionString)) { ctx.Database.ExecuteSqlCommand("TRUNCATE TABLE Module;"); ctx.Database.ExecuteSqlCommand("TRUNCATE TABLE ModulesGraph;"); foreach (var module in symbolTable) { ctx.Modules.Add(new SqlStorage.Module { ModuleId = module.Id.Value, Name = module.Name, Version = module.Version, Description = module.Description }); } for (int i = 0; i < jaggedArray.Length; i++) { var json = JsonConvert.SerializeObject(jaggedArray[i]); ctx.ModuleVertices.Add(new ModuleVertex { VertexId = i, AdjacencyListJson = json }); } ctx.SaveChanges(); } }
private DatabaseObject[] GetDatabaseObjectsInternal(DependencyGraphContext context) { var items = context.DatabaseObjects .ToList() // Materialize objects .Select(s => _engine.Map <Dependencies.Database.DatabaseObject>(s)) .ToArray(); return(items); }
public ProjectRepository(string connectionString) { var store = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers); store.AssertConfigurationIsValid(); _engine = new MappingEngine(store); CreateMaps(store); _context = new DependencyGraphContext(connectionString); }
// SaveState wipes out graph but keeps DatabaseObjects because: // TODO: We could try updating modified vertices only. public void SaveState(DatabaseObjectsGraph dg) { DatabaseObject[] symbolTable = dg.CreateMemento().State; int[][] jaggedArray = dg.Digraph.CreateMemento().State; // Save using (var ctx = new DependencyGraphContext(_connectionString)) { ctx.Database.ExecuteSqlCommand("TRUNCATE TABLE DatabaseObjectsGraph;"); foreach (var databaseObject in symbolTable) { switch (databaseObject.ObjectState) { case ObjectState.VertexAdded: var sqlStorageDatabaseObject = _engine.Map <SqlStorage.DatabaseObject>(databaseObject); ctx.DatabaseObjects.Add(sqlStorageDatabaseObject); break; case ObjectState.PropertiesModified: // Properties can be addedd, deleted or change values var objectInDatabase = ctx.DatabaseObjects.SingleOrDefault(f => f.FullyQualifiedName == databaseObject.FullyQualifiedName); if (objectInDatabase == null) { // We can't add a property to an object that hasn't been saved yet. throw new ArgumentException(nameof(objectInDatabase)); } objectInDatabase.Properties.Clear(); foreach (var property in databaseObject.Properties) { objectInDatabase.Properties.Add(DatabaseObjectConverter.Convert(property)); } ctx.Entry(objectInDatabase).State = EntityState.Modified; break; } } for (int i = 0; i < jaggedArray.Length; i++) { var json = JsonConvert.SerializeObject(jaggedArray[i]); ctx.DatabaseObjectVertices.Add(new DatabaseObjectVertex() { VertexId = i, AdjacencyListJson = json }); } ctx.SaveChanges(); } }