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