#c# #fluent-migrator
Вопрос:
Я пытаюсь создать код, который добавляет столбец «externalId» почти в каждую таблицу в цикле foreach, за некоторыми исключениями. Если имя схемы таблицы равно «Планировщик» или имя таблицы начинается с «пользователи», не добавляйте столбец.
Во-первых, мне, вероятно, понадобится список схем и таблиц.
public class AddExternalIdColumnsToManyTables : Migration
{
public override void Up()
{
// schema name example
// Scheduler.Job
// dbo.users_logins
var schemaAndTableNames = new List<string>();
foreach (var item in schemaAndTableNames)
{
if (item.StartsWith("Scheduler"))
{
continue;
}
if (item.Split('.')[1].StartsWith("users"))
{
continue;
}
Alter.Table(item.Split('.')[1]).AddColumn("ExternalId").AsInt32().Nullable();
}
Ответ №1:
Если вы спрашиваете, как получить имена таблиц:
Класс MigrationBase (родительский класс миграции) имеет свойство ConnectionsString. Вы можете легко получить его и написать ADO.net запрос для получения имен таблиц. Простой пример:
var builder = new SqlConnectionStringBuilder(ConnectionString);
var query = "SELECT TABLE_NAME"
"FROM INFORMATION_SCHEMA.TABLES"
"WHERE TABLE_TYPE = 'BASE TABLE' AND "
$"TABLE_CATALOG = '{builder.InitialCatalog}'"
using (var connection = new SqlConnection(builder.ConnectionString))
{
connection.Open();
var command = new SqlCommand(query, connection);
using (var sqlReader = command.ExecuteReader(CommandBehavior.KeyInfo))
{
var schemaTable = sqlReader.GetSchemaTable();
foreach (DataRow row in schemaTable.Rows)
{
///your table names
}
}
connection.Close();
}