Example #1
0
        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);
                    }
                }
            }
        }
Example #3
0
 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);
					}
				}
			}
		}
Example #5
0
 public static DataColumn[] ForeignKeys(this DataTable dt, IForeignKeys keys)
 {
     return(GetDataColumns(dt, keys.Keys.Select(x => x.FK_Column)));
 }
Example #6
0
        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()));
        }
Example #7
0
        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();
        }