Привет всем; Я хочу создать инструмент, который принимает два словарных объекта,
Dictionary<string, string> tableNames, Dictionary<string, string> columnNames
где ключ - это старая строка имени таблицы, которую следует переименовать, а значение - новая строка для имени таблицы. В одном словаре есть имена таблиц, которые необходимо обновить, а в другом - имена столбцов, которые необходимо обновить. Словарь, содержащий имена столбцов, - это все, что можно использовать для обновления имен столбцов таблицы; связанная таблица, в которой находятся столбцы, будет неизвестна или не будет иметь значения, поскольку я по сути буду менять имя столбца, если ЛЮБАЯ таблица будет иметь конкретную строку имени столбца.
Я смог выполнить описанные выше шаги в порядке со следующим кодом:
Изменить имена таблиц.
using (SqlCommand cmd = new SqlCommand())
{
foreach (KeyValuePair<string, string> keyValuePair in tableNames)
{
cmd.Connection = connection;
cmd.Parameters.Clear();
cmd.CommandText = "sp_RENAME";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@objname", keyValuePair.Key));
cmd.Parameters.Add(new SqlParameter("@newname", keyValuePair.Value));
try
{
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
var v = e.Message;
}
}
}
Изменить имена столбцов.
DataTable dt = connection.GetSchema("Tables");
foreach (DataRow dataRow in dt.Rows)
{
string tableName = dataRow.Field<string>("TABLE_NAME");
foreach (KeyValuePair<string, string> keyValuePair in columnNames)
{
using (SqlCommand cmd = new SqlCommand())
{
cmd.Connection = connection;
cmd.Parameters.Clear();
cmd.CommandText = "sp_RENAME";
cmd.CommandType = System.Data.CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@objname", tableName + "." + keyValuePair.Key));
cmd.Parameters.Add(new SqlParameter("@newname", keyValuePair.Value));
cmd.Parameters.Add(new SqlParameter("@objtype", "COLUMN"));
try
{
cmd.ExecuteNonQuery();
}
catch (Exception e)
{
var v = e.Message;
}
}
}
}
Итак, это круто. Тем не менее, у меня есть около 80+ проектов в решении, где используется Entity Framework, и у меня есть много файлов edmx и edmx.Designer.cs. Всякий раз, когда таблица изменяется, я перехожу к файлу edmx, в котором есть таблица, удаляю таблицу, щелкаю правой кнопкой мыши по пустому пространству и заново добавляю таблицу, выбирая «Обновить модель из базы данных ...».
Я хотел бы получить совет о том, как я могу автоматизировать эти шаги, чтобы я мог перебирать более 80 проектов и обновлять все сопоставления таблиц, либо с помощью грубой силы (удалять и повторно добавлять все таблицы в файле edmx), либо, возможно, Я могу хранить список таблиц, которые были изменены в моем коде, и обновлять только эти таблицы.
Кроме того, если я могу что-то улучшить в приведенном выше коде, пожалуйста, дайте мне знать. У меня есть только некоторый опыт программирования для баз данных, поэтому советы, связанные с этим, также приветствуются. Спасибо!