/// <summary>
        /// Creates new foreign key
        /// </summary>
        /// <param name="tableName">Table name</param>
        /// <param name="dbo">Foreign key description <see cref="ForeignKeyDbo"/></param>
        /// <returns>Description of created foreign key</returns>
        public static ForeignKeyDbo CreateForeignKey(string tableName, ForeignKeyDbo dbo)
        {
            var srv = GetConnectedServer(SqlServerName, UserName, Password);
            var db = srv.Databases[DatabaseName];
            Table aTable = db.Tables[tableName];
            if (aTable == null)
                throw new Exception(String.Format("There is no table {0} in the {1} database.", tableName, DatabaseName));
            if (aTable.ForeignKeys[dbo.Name] != null)
                throw new Exception(String.Format("There is {0} foreign key in the table {1}.", dbo.Name, tableName));

            return CreateForeignKey(aTable, dbo);
        }
 private static ForeignKeyDbo CreateForeignKeyDbo(ForeignKey aKey)
 {
     var rzlt = new ForeignKeyDbo()
     {
         Name = aKey.Name,
         DeleteAction = aKey.DeleteAction,
         UpdateAction = aKey.UpdateAction,
         IsChecked = aKey.IsChecked,
         ReferencedTable = aKey.ReferencedTable
     };
     foreach (ForeignKeyColumn clmn in aKey.Columns)
     {
         rzlt.Columns.Add(new ForeignKeyColumnDbo()
                             {
                                 Name = clmn.Name,
                                 ReferencedColumn = clmn.ReferencedColumn
                             });
     }
     return rzlt;
 }
 /// <summary>
 /// <see cref="http://msdn.microsoft.com/en-us/library/ms219599%28v=sql.90%29.aspx"/>
 /// <seealso cref="http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.foreignkey.aspx"/>
 /// <seealso cref="http://msdn.microsoft.com/en-us/library/ms162566.aspx"/>
 /// </summary>
 /// <param name="fKeyName"></param>
 protected void ShowFields(ForeignKeyDbo selectedItem)
 {
     foreach (ForeignKeyColumnDbo dbo in selectedItem.Columns)
     {
         lstSourceColumnList6.Items.Add(new ListItem(dbo.Name, dbo.Name));
         lstTargetColumnList6.Items.Add(new ListItem(dbo.ReferencedColumn, dbo.ReferencedColumn));
     }
     this.TargetFieldLabel6.InnerText = String.Format("Fields ({0})", selectedItem.ReferencedTable);
 }
        private static ForeignKeyDbo CreateForeignKey(Table aTable, ForeignKeyDbo dbo)
        {
            ForeignKey fKey = new ForeignKey(aTable, dbo.Name)
            {
                DeleteAction = dbo.DeleteAction,
                UpdateAction = dbo.UpdateAction,
                ReferencedTable = dbo.ReferencedTable,
                IsChecked = dbo.IsChecked
            };
            foreach (ForeignKeyColumnDbo clmn in dbo.Columns)
            {
                ForeignKeyColumn fkColumn = new ForeignKeyColumn(fKey, clmn.Name, clmn.ReferencedColumn);
                fKey.Columns.Add(fkColumn);
            }
            fKey.Create();

            return CreateForeignKeyDbo(fKey);
        }