public static string CREATE_TABLE(string fields, IPrimaryKeys primary, IForeignKeys foreign = null) { string primaryKey = string.Empty; if (primary.Length > 0) { primaryKey = string.Format("\tPRIMARY KEY({0})", string.Join(",", primary.Keys.Select(key => $"[{key}]"))); } string foreignKey = string.Empty; if (foreign != null && foreign.Length > 0) { foreignKey = string.Join(Environment.NewLine, foreign.Keys.Select(key => $"\tFOREIGN KEY ([{key.FK_Column}]) REFERENCES [{key.PK_Table}]([{key.PK_Column}])")); } StringBuilder x = new StringBuilder("CREATE TABLE {0}"); x.AppendLine("("); x.AppendLine(fields); if (primaryKey != string.Empty) { x.AppendLine(primaryKey); } if (foreignKey != string.Empty) { x.AppendLine(foreignKey); } x.AppendLine(")"); string SQL = x.ToString(); return(SQL); }
private void ExpandForeignKeys(IForeignKeys foreignKeys, TreeNode node) { if (HasBlankNode(node)) { foreach (IForeignKey foreignKey in foreignKeys) { TreeNode n; TreeNode fkNode = new TreeNode(foreignKey.Name); fkNode.Tag = new NodeData(NodeType.FOREIGNKEY, foreignKey); fkNode.SelectedImageIndex = fkNode.ImageIndex = 12; node.Nodes.Add(fkNode); if (foreignKey.PrimaryColumns.Count > 0) { n = new TreeNode("PrimaryColumns"); n.Tag = new NodeData(NodeType.COLUMNS, foreignKey.PrimaryColumns); n.SelectedImageIndex = n.ImageIndex = 9; fkNode.Nodes.Add(n); n.Nodes.Add(this.BlankNode); } if (foreignKey.ForeignColumns.Count > 0) { n = new TreeNode("ForeignColumns"); n.Tag = new NodeData(NodeType.COLUMNS, foreignKey.ForeignColumns); n.SelectedImageIndex = n.ImageIndex = 9; fkNode.Nodes.Add(n); n.Nodes.Add(this.BlankNode); } } } }
internal void UpdateForeign(IForeignKeys foreign) { foreach (ForeignKey key in foreign.Keys) { IColumn column = this.Find(col => col.ColumnName == key.FK_Column); column.SetForeignKey(key); } }
private void ExpandForeignKeys(IForeignKeys foreignKeys, TreeNode node) { if(HasBlankNode(node)) { foreach(IForeignKey foreignKey in foreignKeys) { TreeNode n; TreeNode fkNode = new TreeNode(foreignKey.Name); fkNode.Tag = new NodeData(NodeType.FOREIGNKEY, foreignKey); fkNode.SelectedImageIndex = fkNode.ImageIndex = 12; node.Nodes.Add(fkNode); if(foreignKey.PrimaryColumns.Count > 0) { n = new TreeNode("PrimaryColumns"); n.Tag = new NodeData(NodeType.COLUMNS, foreignKey.PrimaryColumns); n.SelectedImageIndex = n.ImageIndex = 9; fkNode.Nodes.Add(n); n.Nodes.Add(this.BlankNode); } if(foreignKey.ForeignColumns.Count > 0) { n = new TreeNode("ForeignColumns"); n.Tag = new NodeData(NodeType.COLUMNS, foreignKey.ForeignColumns); n.SelectedImageIndex = n.ImageIndex = 9; fkNode.Nodes.Add(n); n.Nodes.Add(this.BlankNode); } } } }
public static DataColumn[] ForeignKeys(this DataTable dt, IForeignKeys keys) { return(GetDataColumns(dt, keys.Keys.Select(x => x.FK_Column))); }
private void GenerateForeigns(string className, IForeignKeys foreigns) { List <string> foreignKeysToOne = new List <string>(); List <string> foreignKeysToMany = new List <string>(); if (foreigns != null) { foreach (IForeignKey fk in foreigns) { if (fk.ForeignTable.Equals(table)) { string item = this.propertyToOneTemplate; string name = fk.PrimaryTable.Name; string schema = fk.PrimaryTable.Schema; if (schema != string.Empty && schema != "dbo" && schema != table.Schema) { schema = schema + "."; } else { schema = string.Empty; } item = item.Replace("$elementtype$", schema + name); item = item.Replace("$propertyname$", name); item = item.Replace("$fkname$", fk.Name); List <string> headers = new List <string>(); for (int i = 0; i < fk.ForeignColumns.Count; i++) { string header = this.propertyToOneTemplateHeader; header = header.Replace("$elementtype$", this.baseNamespace + "." + schema + name); header = header.Replace("$foreign$", fk.PrimaryColumns[i].Name); header = header.Replace("$local$", fk.ForeignColumns[i].Name); headers.Add(header); } item = item.Replace(Template.listTempMark, string.Join(", ", headers.ToArray())); foreignKeysToOne.Add(item); } else if (fk.PrimaryTable.Equals(table) && fk.ForeignTable.PrimaryKeys.Count == 1 && fk.PrimaryColumns.Count == 1 && fk.ForeignColumns[0].IsInPrimaryKey) { string item = this.propertyToOneTemplate; string name = fk.ForeignTable.Name; string schema = fk.ForeignTable.Schema; if (schema != string.Empty && schema != "dbo" && schema != table.Schema) { schema = schema + "."; } else { schema = string.Empty; } item = item.Replace("$elementtype$", schema + name); item = item.Replace("$propertyname$", name); item = item.Replace("$fkname$", fk.Name); List <string> headers = new List <string>(); for (int i = 0; i < fk.ForeignColumns.Count; i++) { string header = this.propertyToOneTemplateHeader; header = header.Replace("$elementtype$", this.baseNamespace + "." + schema + name); header = header.Replace("$foreign$", fk.ForeignColumns[i].Name); header = header.Replace("$local$", fk.PrimaryColumns[i].Name); headers.Add(header); } item = item.Replace(Template.listTempMark, string.Join(", ", headers.ToArray())); foreignKeysToOne.Add(item); } else if (fk.PrimaryTable.Equals(table)) { string item = this.propertyToManyTemplate; string name = fk.ForeignTable.Name; string schema = fk.ForeignTable.Schema; if (schema != string.Empty && schema != "dbo" && schema != table.Schema) { schema = schema + "."; } else { schema = string.Empty; } item = item.Replace("$elementtype$", schema + name); item = item.Replace("$propertyname$", name); item = item.Replace("$fkname$", fk.Name); List <string> headers = new List <string>(); for (int i = 0; i < fk.ForeignColumns.Count; i++) { string header = this.propertyToManyTemplateHeader; header = header.Replace("$elementtype$", this.baseNamespace + "." + schema + name); header = header.Replace("$foreign$", fk.ForeignColumns[i].Name); header = header.Replace("$local$", fk.PrimaryColumns[i].Name); headers.Add(header); } item = item.Replace(Template.listTempMark, string.Join(", ", headers.ToArray())); foreignKeysToMany.Add(item); } } } template = template.Replace(Template.propertiesToManyTempMark, string.Join(Environment.NewLine, foreignKeysToMany.ToArray())); template = template.Replace(Template.propertiesToOneTempMark, string.Join(Environment.NewLine, foreignKeysToOne.ToArray())); }
public void Generate(string path) { string folder = null; ParseTemplate(); IColumns colunas = null; IForeignKeys foreigns = null; string fileName = null; string className = null; if (table != null) { colunas = table.Columns; foreigns = table.ForeignKeys; className = GenerateClass(table.Schema, table.Name, baseNamespace, table.Description, out folder); } else if (view != null) { colunas = view.Columns; className = GenerateClass(view.Schema, view.Name, baseNamespace, view.Description, out folder); } else { throw new InvalidOperationException(); } GenerateProperties(className, colunas); GenerateForeigns(className, foreigns); fileName = className; switch (language) { case Language.CSharp: fileName += ".cs"; break; case Language.VBNet: fileName += ".vb"; break; default: break; } if (!string.IsNullOrEmpty(folder)) { path += Path.DirectorySeparatorChar + folder; } path += Path.DirectorySeparatorChar + "AutoGenerated"; if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } fileName = path + Path.DirectorySeparatorChar + fileName; if (File.Exists(fileName)) { File.Delete(fileName); } StreamWriter file = new StreamWriter(fileName); file.Write(template); file.Close(); }