예제 #1
0
        private void GenerateForeignKeys(List <DBInfo.Core.Statement.CreateForeignKey> createFKList)
        {
            if (!Directory.Exists(OutputDir + "\\" + ForeignKeysDir))
            {
                Directory.CreateDirectory(OutputDir + "\\" + ForeignKeysDir);
            }

            List <string> tableNames =
                (from DBInfo.Core.Statement.CreateForeignKey cfk in createFKList
                 select cfk.ForeignKey.TableName).Distinct <string>().ToList <string>();

            foreach (string tableName in tableNames)
            {
                List <DBInfo.Core.Statement.CreateForeignKey> createFKByTable =
                    (from DBInfo.Core.Statement.CreateForeignKey cfk in createFKList
                     where cfk.ForeignKey.TableName == tableName
                     select cfk).ToList <DBInfo.Core.Statement.CreateForeignKey>();

                int count = 0;
                foreach (DBInfo.Core.Statement.CreateForeignKey cfk in createFKByTable)
                {
                    StatementCollection xmlDB = new StatementCollection();
                    xmlDB.Statement = new Statement[createFKByTable.Count];

                    CreateForeignKey xmlFK = new CreateForeignKey();
                    xmlFK.TableName      = cfk.ForeignKey.TableName;
                    xmlFK.ForeignKeyName = cfk.ForeignKey.ForeignKeyName;
                    xmlFK.RefTableName   = cfk.ForeignKey.RefTableName;
                    xmlFK.DeleteCascade  = cfk.ForeignKey.DeleteCascade ? YesNo.Yes : YesNo.No;
                    xmlFK.UpdateCascade  = cfk.ForeignKey.UpdateCascade ? YesNo.Yes : YesNo.No;
                    xmlFK.Columns        = new ForeignKeyColumn[cfk.ForeignKey.Columns.Count];
                    foreach (DBInfo.Core.Model.ForeignKeyColumn c in cfk.ForeignKey.Columns)
                    {
                        ForeignKeyColumn xmlFKCol = new ForeignKeyColumn();
                        xmlFKCol.ColumnName    = c.Column;
                        xmlFKCol.RefColumnName = c.RefColumn;
                        xmlFK.Columns[cfk.ForeignKey.Columns.IndexOf(c)] = xmlFKCol;
                    }
                    xmlDB.Statement[count] = xmlFK;
                    count++;

                    generateXMLOutput(xmlDB, OutputDir + "\\" + ForeignKeysDir + "\\" + tableName + ".fk.xml", true);
                }
            }
        }
        private DBInfo.Core.Statement.CreateForeignKey ParseCreateForeignKeyStatement(CreateForeignKey xmlFK)
        {
            DBInfo.Core.Model.ForeignKey fk = new DBInfo.Core.Model.ForeignKey();
            fk.TableName      = xmlFK.TableName;
            fk.ForeignKeyName = xmlFK.ForeignKeyName;
            fk.RefTableName   = xmlFK.RefTableName;
            fk.DeleteCascade  = xmlFK.DeleteCascade == YesNo.Yes;
            fk.UpdateCascade  = xmlFK.UpdateCascade == YesNo.Yes;

            if (xmlFK.Columns != null)
            {
                foreach (ForeignKeyColumn xmlFKCol in xmlFK.Columns)
                {
                    DBInfo.Core.Model.ForeignKeyColumn fkCol = new DBInfo.Core.Model.ForeignKeyColumn();
                    fkCol.Column    = xmlFKCol.ColumnName;
                    fkCol.RefTable  = xmlFK.RefTableName;
                    fkCol.RefColumn = xmlFKCol.RefColumnName;
                    fk.Columns.Add(fkCol);
                }
            }

            DBInfo.Core.Statement.CreateForeignKey cfk = new DBInfo.Core.Statement.CreateForeignKey();
            cfk.ForeignKey = fk;
            return(cfk);
        }