public void MakeForeignKey(ColumnNode columnNode, ForeignKeyWizModel model) { FkRelation fkRelation = null; RelationNode relationNode = null; if (model == null) { fkRelation = new FkRelation(columnNode.Name); relationNode = new RelationNode(fkRelation, columnNode.Parent); } else { fkRelation = (FkRelation)model.RelationNode.Relation; relationNode = model.RelationNode; } fkRelation.OwningTable = ((TableNode)relationNode.Parent).Table.Name; fkRelation.OwningType = ((TableNode)relationNode.Parent).Table.ClassName; IList tableNodes = new ArrayList(); if (model == null) { foreach (TableNode tnode in ((DatabaseNode)columnNode.Parent.Parent).TableNodes) { if (tnode.Table.MappingType == TableMappingType.MappedAsClass) { tableNodes.Add(tnode); } } model = new ForeignKeyWizModel(relationNode, tableNodes); IWizardController controller = ApplicationController.wizardControllerFactory.Create ("ForeignKeyWizController", "ForeignKeyWiz", "Foreign Key Wizard"); //controller.FrameSize = new Size( 544, 408 ); DialogResult r = controller.Run(model); if (r == DialogResult.OK) { MakeForeignKeyRelation(relationNode, columnNode, model); } } else { MakeForeignKeyRelation(relationNode, columnNode, model); } }
public bool MapIntermediateClass(TableNode tn) { // IntermediateClass ic = new IntermediateClass(); // IntermediateClassNode icn = new IntermediateClassNode(ic, tn); IList tableNodes = new ArrayList(); foreach (TableNode tnode in databaseNode.TableNodes) { if (tn.Text == tnode.Text) { continue; } if (tnode.Table.MappingType == TableMappingType.MappedAsClass) { tableNodes.Add(tnode); } } IntermediateClassWizardModel model = new IntermediateClassWizardModel(tn, tableNodes); IWizardController controller = ApplicationController.wizardControllerFactory.Create ("IntermediateClassWizController", "IntClassWiz", "Intermediate Class Wizard"); //controller.FrameSize = new Size(544, 500); model[0].RelationDirection = RelationDirection.Bidirectional; model[1].RelationDirection = RelationDirection.Bidirectional; DialogResult r = controller.Run(model); if (r == DialogResult.OK) { DatabaseNode parent = (DatabaseNode)tn.Parent; // Nothing to remove, because we use the original table node // tn.Remove(); // tn.Parent.Nodes.Add(icn); for (int i = 0; i < 2; i++) { ColumnNode columnNode = (ColumnNode)tn.FindNode(model[i].ForeignKeyColumnName, typeof(ColumnNode)); FkRelation fkr = new FkRelation(columnNode.Text); IntermediateClassInfo intermClInfo = model[i]; fkr.FieldName = intermClInfo.OwnFieldName; fkr.ForeignCodingStyle = intermClInfo.CodingStyle; fkr.ForeignFieldName = intermClInfo.ForeignFieldName; fkr.ForeignIsComposite = false; fkr.IsComposite = false; fkr.OwningTable = tn.Text; fkr.OwningType = tn.Table.ClassName; fkr.RelatedTable = intermClInfo.Table; fkr.RelatedType = intermClInfo.Type; fkr.RelationDirection = intermClInfo.RelationDirection; fkr.RelationName = string.Empty; //ForeignFkRelation ffkr = fkr.ForeignRelation; RelationNode relationNode = new RelationNode(fkr, tn); relationNode.RelatedTableNode = (TableNode)databaseNode.FindNode(intermClInfo.Table); ForeignKeyWizModel fkwizModel = new ForeignKeyWizModel(relationNode, new ArrayList()); tn.DualKeyRelations[i] = intermClInfo.OwnFieldName; MakeForeignKeyRelation(relationNode, columnNode, fkwizModel); } return(true); } return(false); }
public void MapIntermediateTable(TableNode tn) { IntermediateTable it = new IntermediateTable(tn.Text); IntermediateTableNode itn = new IntermediateTableNode(it, tn); IList tableNodes = databaseNode.TableNodes; tableNodes.Remove(tn); IntermediateTableWizardModel model = new IntermediateTableWizardModel(itn, tableNodes); IWizardController controller = ApplicationController.wizardControllerFactory.Create ("IntermediateTableWizController", "IntTblWiz", "Intermediate Table Wizard"); //controller.FrameSize = new Size(544, 416); DialogResult r = controller.Run(model); if (r == DialogResult.OK) { DatabaseNode parent = (DatabaseNode)tn.Parent; //tn.Parent.Nodes. Remove(tn); int index = parent.Nodes.IndexOf(tn); tn.Remove(); tn.Parent.Nodes.Insert(index, itn); itn.TreeView.SelectedNode = itn; itn.Nodes.Add(tn); // This ensures persisting the column nodes with file/save. RelatedTableInfo rti0 = it[0]; RelatedTableInfo rti1 = it[1]; TableNode relTn0 = null; TableNode relTn1 = null; RelationNode relNode0 = null; RelationNode relNode1 = null; foreach (TableNode loopTn in tableNodes) { if (loopTn.Text == rti0.Table) { relTn0 = loopTn; if (rti0.RelationDirection != RelationDirection.DirectedToMe) { ForeignIntermediateTableRelation fitr = new ForeignIntermediateTableRelation(rti0, tn.Text); relNode0 = new RelationNode(fitr, relTn0); relTn0.Nodes.Add(relNode0); } } if (loopTn.Text == rti1.Table) { relTn1 = loopTn; if (rti1.RelationDirection != RelationDirection.DirectedToMe) { ForeignIntermediateTableRelation fitr = new ForeignIntermediateTableRelation(rti1, tn.Text); relNode1 = new RelationNode(fitr, relTn1); relTn1.Nodes.Add(relNode1); } } } if (relNode0 != null) { relNode0.RelatedTableNode = relTn1; } if (relNode1 != null) { relNode1.RelatedTableNode = relTn0; } } }