簡體   English   中英

是否可以在application_start中使用流暢的遷移器?

[英]Is it possible to use fluent migrator in application_start?

我正在使用流暢的遷移器來管理我的數據庫遷移,但我想要做的是讓遷移在應用程序啟動時運行。 我管理的最接近的是:

public static void MigrateToLatest(string connectionString)
{
    using (var announcer = new TextWriterAnnouncer(Console.Out)
                                {
                                    ShowElapsedTime = true,
                                    ShowSql = true
                                })
    {
        var assembly = typeof(Runner).Assembly.GetName().Name;

        var migrationContext = new RunnerContext(announcer)
        {
            Connection = connectionString,
            Database = "SqlServer2008",
            Target = assembly
        };

        var executor = new TaskExecutor(migrationContext);
        executor.Execute();
    }
}

我確定我有這個工作,但是我沒有看過它(業余愛好項目),它現在在它到達Execute行時拋出空引用異常。 可悲的是,沒有這方面的文檔,而且我多年來一直在敲打它。

有沒有人設法讓這種東西與FluentMigrator合作?

PM> Install-Package FluentMigrator.Tools

手動添加對以下內容的引用:

packages\FluentMigrator.Tools.1.6.1\tools\AnyCPU\40\FluentMigrator.Runner.dll

請注意,文件夾名稱將因版本號而異,此插圖使用當前的1.6.1版本。 如果需要.NET 3.5 runner,請使用\\35\\目錄。

public static class Runner
{
    public class MigrationOptions : IMigrationProcessorOptions
    {
        public bool PreviewOnly { get; set; }
        public string ProviderSwitches { get; set; }
        public int Timeout { get; set; }
    }

    public static void MigrateToLatest(string connectionString)
    {
        // var announcer = new NullAnnouncer();
        var announcer = new TextWriterAnnouncer(s => System.Diagnostics.Debug.WriteLine(s));
        var assembly = Assembly.GetExecutingAssembly();

        var migrationContext = new RunnerContext(announcer)
        {
            Namespace = "MyApp.Sql.Migrations"
        };

        var options = new MigrationOptions { PreviewOnly=false, Timeout=60 };
        var factory = 
            new FluentMigrator.Runner.Processors.SqlServer.SqlServer2008ProcessorFactory();

        using (var processor = factory.Create(connectionString, announcer, options))
        { 
            var runner = new MigrationRunner(assembly, migrationContext, processor);
            runner.MigrateUp(true);
        }
    }
}

請注意, SqlServer2008ProcessorFactory可根據您的數據庫進行配置,支持:2000,2005,2008,2012和2014。

我實際上已經完成了在application_start中運行遷移,但很難從代碼中判斷出什么是錯誤的......因為它是開源的,我只需抓住代碼並將其拉入您的解決方案並構建它以找出執行方法正在抱怨。 我發現Fluent Migrator的源代碼組織得很好。

如果這是一個Web應用程序,您可能需要關注的一件事是確保在遷移時沒有人使用數據庫。 我使用了建立連接,將數據庫設置為單用戶模式,運行遷移,將數據庫設置為多用戶模式,然后關閉連接的策略。 這還處理多個服務器上的負載平衡Web應用程序的場景,因此2台服務器不會嘗試針對同一數據庫運行遷移。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM