dbup - 資料庫更新工具

dbup是一個用來更新資料庫的工庫,只能往前更新,不能往後回復更新
dbup-consolescripts是用來新增一個年月日時分秒_檔名.sql的套件

新增一個Console專案

透過NuGet新增dbup和db-consolescripts套件

1
2
$ install-package dbup
$ install-package dbup-consolescripts

加入System.Configuration參考

新增連線字串

1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8" ?>
<configuration>

    <connectionStrings>
        <add name="DBConn" providerName="System.Data.SqlClient"
             connectionString="data source=(localdb)\ATCity;initial catalog=RankingSystem;trusted_connection=true;"/>
    </connectionStrings>
   
    <startup>
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
</configuration>

修改Program.cs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
namespace SGT.ATCity.RankingSystem.Database
{
    using System;
    using System.Configuration;
    using System.Reflection;
    using DbUp;

    public class Program
    {
        private static int Main(string[] args)
        {
            var connectionString = ConfigurationManager.ConnectionStrings["DBConn"].ConnectionString;
            var upgrader =
                DeployChanges.To
                    .SqlDatabase(connectionString)
                    .WithScriptsEmbeddedInAssembly(Assembly.GetExecutingAssembly())
                    .LogToConsole()
                    .Build();

            var result = upgrader.PerformUpgrade();

            if (!result.Successful)
            {
                Console.ForegroundColor = ConsoleColor.Red;
                Console.WriteLine(result.Error);
                Console.ResetColor();
                return -1;
            }

            Console.ForegroundColor = ConsoleColor.Green;
            Console.WriteLine("Success!");
            Console.ResetColor();
            return 0;
        }
    }
}

新增SQL檔案

  • 透過套件管理器主控台執行New-Migration 名稱, 即可新增一個年月日時分秒_名稱的sql檔案
  • 檔案的順序很重要, 會影響呼叫的執行順序
  • 編輯要更新資料庫的SQL語法

按下F5執行資料庫更新

資料庫更新結果

  • 新增一個SchemaVersions資料表來記錄更新的記錄
  • 相同檔名只會執行一次