2016年5月18日 星期三

dbup - 資料庫更新工具

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

新增一個Console專案


## 透過NuGet新增dbup和db-consolescripts套件
```shell
$ install-package dbup
$ install-package dbup-consolescripts
```


# 加入System.Configuration參考


## 新增連線字串
```xml
<?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
```cs
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資料表來記錄更新的記錄
* 相同檔名只會執行一次