.NET миграции: настройка и миграция нескольких баз данных во время выполнения - PullRequest
9 голосов
/ 15 июля 2010

Краткое введение: У меня есть этот сайт ASP.NET Webforms с той особенностью, что у него не только одна база данных, но и много. Зачем? Потому что вы можете создавать новые «экземпляры» сайта на лету. Каждый «экземпляр» использует одну и ту же кодовую базу, но имеет свою собственную базу данных. Все эти базы данных имеют одинаковую схему (структуру), но, конечно, разные данные. Не спрашивайте «почему вы не помещаете все в одну базу данных и не используете InstanceId, чтобы узнать, что это такое», потому что это бизнес-политика.

Приложение знает, какой экземпляр запрашивается из-за URL. Для этого есть одна дополнительная база данных (я знаю ее строку подключения во время разработки). Эта база данных имеет только 2 таблицы и ассоциирует URL с «экземплярами приложения». Тогда, конечно, каждому «экземпляру приложения» соответствует строка подключения.

Текущая ситуация: Сейчас ничего не используется, чтобы помочь нам в работе по синхронизации каждой базы данных экземпляра (распространение схемы меняется на каждую). Так что мы делаем это вручную, что, конечно, является полным беспорядком.

Вопрос: Я бы хотел использовать способ рельсовой миграции для обработки изменений схемы, предпочтительно migratordotnet , но мог бы использовать любой другой, если его проще настроить.

Проблема в том, что migratordotnet требуется, чтобы строка соединения была объявлена ​​в файле proj.build , и я не знаю их до времени выполнения.

Что было бы ДЕЙСТВИТЕЛЬНО полезно, так это какой-то метод, работающий на Application_Start , который применяет последнюю миграцию к каждой базе данных.

Как это можно сделать с помощью migratordotnet или подобного? Любые другие предложения приветствуются.

Спасибо!

Ответы [ 4 ]

4 голосов
/ 21 февраля 2011

Поскольку это старый вопрос, я предполагаю, что вы решили проблему тем или иным способом, но я все равно опубликую решение для блага других людей, которые наткнулись на этот вопрос.Можно вызвать MigratorDotNet из кода, вместо того, чтобы использовать его в качестве цели MSBuild:

public static void MigrateToLastVersion(string provider, string connectionString)
{
    var silentLogger = new Logger(false, new ILogWriter[0]);
    var migrator = new Migrator.Migrator(provider, connectionString, 
                   typeof(YourMigrationAssembly).Assembly, false, silentLogger);
    migrator.MigrateToLastVersion();
}
1 голос
/ 26 июля 2010

RedGate имеет SDK для сравнения SQL, который можно использовать.Вот Case Study , которое выглядит многообещающим, но я не могу сказать вам, что я вам по опыту, потому что я не использовал его.Загрузите пробную версию и пинайте шины.

1 голос
/ 17 февраля 2011

Вы можете использовать Mig # для поддержки ваших миграций в коде C # или .NET: https://github.com/dradovic/MigSharp

0 голосов
/ 15 июля 2010

Выезд Fluent-Migrator .

...