c# - FluentMigrator - 将列添加到循环中的每个表
问题描述
我正在尝试创建将列“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();
}
解决方案
如果您询问如何获取表名:
MigrationBase 类(Migration 的父级)具有 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();
}
推荐阅读
- vba - 如何搜索完全粗体的段落?
- excel - 分配给 Excel 中的图形图标时,宏无法正常工作。但它在通过 VBA IDE 运行时工作
- sqlite - 从 SQLite 中的两个表中随机选择
- c# - 按下 Arduino 按钮后如何在 C# 应用程序上执行操作?
- c# - 如何在 xamarin android 中使用这个库(smarteist Android-Image-Slider)?
- thorntail - 如何在 thorntail 中设置相对路径日志记录?
- kotlin - Kotlin Flow 的 GroupBy 运算符
- bash - Ultisnips 中的制表位无法与 zsh 一起正常工作
- resources - 迭代 puppet 资源收集器
- regex - 正则表达式 url 参数 IIS