示例#1
0
        // 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);
        }
示例#2
0
 // 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();
            }
        }
示例#6
0
        private DatabaseObject[] GetDatabaseObjectsInternal(DependencyGraphContext context)
        {
            var items = context.DatabaseObjects
                        .ToList() // Materialize objects
                        .Select(s => _engine.Map <Dependencies.Database.DatabaseObject>(s))
                        .ToArray();

            return(items);
        }
示例#7
0
        public ProjectRepository(string connectionString)
        {
            var store = new ConfigurationStore(new TypeMapFactory(), MapperRegistry.Mappers);

            store.AssertConfigurationIsValid();
            _engine = new MappingEngine(store);
            CreateMaps(store);
            _context = new DependencyGraphContext(connectionString);
        }
示例#8
0
        // 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();
            }
        }