private static void RenameOtherForeignKeys(Database db, Table aTable, string newTableName) { string pattern = String.Format(@"_{0}\b|_{0}_", aTable.Name); var rg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); DataTable tbForeignKeys = aTable.EnumForeignKeys(); var foreignKeyList = from fKey in tbForeignKeys.AsEnumerable() where rg.IsMatch(fKey.Field <string>("Name")) select new { TableName = fKey.Field <string>("Table_Name"), ForeignKeyName = fKey.Field <string>("Name") }; foreach (var fk in foreignKeyList) { Table currentTable = db.Tables[fk.TableName]; ForeignKey key = currentTable.ForeignKeys[fk.ForeignKeyName]; string newKeyName = rg.Replace(key.Name, delegate(Match m) { string mString = m.ToString(); return(String.Format("_{0}{1}", newTableName, mString.EndsWith("_") ? "_" : String.Empty)); }); key.Rename(newKeyName); key.Alter(); } }
private static void RenameThisForeignKeys(Table aTable, string newTableName) { string pattern = String.Format(@"_{0}\b|_{0}_", aTable.Name); var rg = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase); for (int i = aTable.ForeignKeys.Count - 1; i >= 0; i--) { ForeignKey key = aTable.ForeignKeys[i]; string newKeyName = rg.Replace(key.Name, delegate(Match m) { string mString = m.ToString(); return(String.Format("_{0}{1}", newTableName, mString.EndsWith("_") ? "_" : String.Empty)); }); if (String.Compare(key.Name, newKeyName, true) != 0) { key.Rename(newKeyName); key.Alter(); } } }
/// <summary> /// Renames foreign key. /// <param name="tableName">Table name</param> /// <param name="oldName">Old name</param> /// <param name="newName">New name</param> /// </summary> public static ForeignKeyDbo RenameTheForeignKey(string tableName, string oldName, string newName) { 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)); } ForeignKey fKey = aTable.ForeignKeys[oldName]; if (fKey == null) { throw new Exception(String.Format("There is no foreign key {0} in the {1} table.", oldName, tableName)); } fKey.Rename(newName); fKey.Alter(); return(CreateForeignKeyDbo(fKey)); }