Я бы отправил файл SQL вместе с вашим приложением и имел бы логику запуска приложения, которая всегда проверяет определенное место на наличие сценариев, которые необходимо запустить. Это может быть так же просто, как проверка папки [путь к приложению] \ MigrationScripts для всех файлов .sql. Если файлы найдены, прочитайте их содержимое и выполните для базы данных.
После завершения проверки (и потенциальных обновлений базы данных) продолжайте загрузку приложения.
Пример кода (не проверено) и очень простая реализация:
public class Migration
{
private string _migrationPath = @"C:\temp\MigrationSteps"; //change
private string[] _sqlFiles = null;
public Migration()
{
Initialize();
}
public Migration(string path)
{
_migrationPath = path;
Initialize();
}
private void Initialize()
{
_sqlFiles = Directory.GetFiles(_migrationPath, "*.sql");
}
public bool Run()
{
bool success = true;
foreach (string sqlFile in _sqlFiles)
{
ExecuteRun(File.ReadAllText(sqlFile));
}
return success; //Do something with this value
}
public bool CleanUp()
{
//Put some logic here to "clean up" files that have already been run.
throw new NotImplementedException();
}
private bool ExecuteRun(string sqlText)
{
//Call your data access library and execute the sqlText
throw new NotImplementedException();
}
}
Использование:
Migration migration = new Migration();
if (migration.Run())
{
migration.CleanUp();
}
else
{
//Do something
}