<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12
      代碼改變世界

      面向.Net程序員的Sql版本管理

      2015-03-13 15:09  熬夜的蟲子  閱讀(3205)  評論(14)    收藏  舉報

      代碼版本管理基本上程序員們都知道 TFS GIT SVN等等 但是對于數據庫版本管理 java程序員或許會了解一些 但是.Net程序員收獲的資料應該不多。

      特別是現在云概念使用越來越廣的情況下,與應用程序開發和部署常規管理數據庫更改在一起便成為一個難題。

      這里就分享一個用來進行sql版本管理的.net程序。源碼地址:https://github.com/dubing/SqlMigrator


      如圖所示

      因為只是研究著玩 暫時工具做的不復雜 提供版本跟進 回滾等基本功能

      FluentMigrator : https://github.com/schambers/fluentmigrator/wiki/Migration

      基于開源組件FluentMigrator通過nuget可以很方便的獲取

      我們通過一個工程來專門定義管理數據庫版本。

      下面我們一步一步來研究

      首先最基本的是建表

      這里我們創建了一個user是表并且附帶2個字段其中id是主鍵并且自增,name為一個string類型不可空并且默認值為Anonymous。

      通過程序我們發現對于一次部署或者遷移我們會重寫2塊代碼 一個是up()一個是down()通過字面意思我們就可以理解到 他們分別實現的功能是向上遷移和向下回滾。

      [Migration(2015031201)]中的2015031201即為我們的版本號,需要以數字組成,使用日期的方式+自定義版本號是個很好的選擇。

      類名相當于描述,起著備注說明的作用。

      FluentMigrator運行的方式有很多種,可以通過命令行,Nant,msbuild,Rake等等。demo程序中結合winform使用命令行方式執行。

      我們先來看一下我們操作的效果,

      本來我們所連的數據庫是沒有users這張表的

      我們運行一下程序 執行版本跟進

      執行成功,重新加載看看

      已經有版本信息里,最后我們到數據庫確認一下

      其實除了我們編寫的部分,FluentMigrator也會在我們的數據庫中新生成一張表versioninfo用來記錄我們的版本信息,來保證我們不會進行多余和重復的跟進或者回滾。

      下面我們來繼續創建第2個部署模塊

      運行demo

      我們會發現程序自動略過了2015031201,重新加載數據庫

      當前版本已經為新的 并且添加了履歷。數據庫也是添加成功


      上面我們一直討論版本跟進 下面我們來嘗試下回滾,接著上面的demo,這個時候我們已經進行了2次部署,如果我發現最新的一次不是我想要的 我需要回滾到上面一個版本。

      那么我們點擊回滾到上一次看一下

      我們發現我們運行的命令不同了。同時我們的版本信息回到了上一次。


       

      如果說我對FluentMigrator本身的語法并不了解怎么辦,沒關系。FluentMigrator本身支持sql腳本。

      運行demo

      細心的同學會發現 2015031202也被我們執行了 因為對于FluentMigrator而言 如果你本身回滾后不做任何處理,當下一次版本跟進的時候它會認為那次部署還是有效的。如果要T掉那個部署可以選擇在項目中注釋掉或者移除那個部署模塊。

       

      如此看來 我們基本的版本管理動作是ok的。那么除了創建和刪除表,我們還可以進行大部分sql操作,例如更新列,添加數據,更改表名稱等等。下面我們簡單來試驗一下。

       1         /// <summary>
       2         ///添加列
       3         /// </summary>
       4         [Migration(2015031301)]
       5         public class AlertUser : Migration
       6         {
       7             public override void Up()
       8             {
       9                 Alter.Table("Users")
      10                     .AddColumn("Age")
      11                     .AsInt16()
      12                     .Nullable();
      13             }
      14 
      15             public override void Down()
      16             {
      17                 Delete.Column("Age").FromTable("Users");
      18             }
      19         }
      20 
      21         /// <summary>
      22         /// 添加行數據
      23         /// </summary>
      24         [Migration(2015031302)]
      25         public class AddDeptRows : Migration
      26         {
      27             public override void Up()
      28             {
      29                 Insert.IntoTable("Dept").Row(new { DeptName = "maoyatest" });
      30             }
      31 
      32             public override void Down()
      33             {
      34                 Delete.FromTable("Dept").Row(new { DeptName = "maoyatest" });
      35             }
      36         }
      37 
      38         /// <summary>
      39         /// 修改表名稱
      40         /// </summary>
      41         [Migration(2015031303)]
      42         public class RenameUsers : Migration
      43         {
      44             public override void Up()
      45             {
      46                 Rename.Table("Users").To("UsersNew");
      47             }
      48 
      49             public override void Down()
      50             {
      51                 Rename.Table("UsersNew").To("Users");
      52             }
      53         }

      看運行結果

      重新加載

      版本信息也正確

      結果也是完全正確。


      本篇先到此 希望對大家有幫助 下篇會分享下redis的玩法

       

      主站蜘蛛池模板: 91偷自国产一区二区三区| 自偷自拍亚洲综合精品| 女人与公狍交酡女免费| 永久黄网站色视频免费直播| 黑人强伦姧人妻久久| 最新亚洲人成网站在线影院| 亚洲熟女乱综合一区二区| 免费无码午夜理论电影| 偷拍专区一区二区三区| 磐石市| 国产精品一区二区色综合| 中文字幕精品人妻丝袜| 亚洲成人av在线高清| 久久天天躁狠狠躁夜夜躁2012| 国产精品午夜福利视频| 宜兴市| 国产成人a在线观看视频| 亚洲熟妇少妇任你躁在线观看无码| 在线精品自拍亚洲第一区| 最新国产精品拍自在线观看| 久久一日本综合色鬼综合色| 日韩精品亚洲专区在线观看| 中文字幕乱码亚洲无线三区| 国产高清无遮挡内容丰富| 永久免费无码成人网站| 国产成人亚洲综合图区| 国产精品国产三级国av| 神马午夜久久精品人妻| 一区二区三区无码免费看| 精品人妻二区中文字幕| 欧美综合天天夜夜久久| 欧洲无码一区二区三区在线观看 | 欧美日韩国产图片区一区| 国内精品国产三级国产a久久| 精品超清无码视频在线观看| 99久久国产综合精品色| 99久久国产精品无码| 少妇av一区二区三区无码| 丰满少妇被猛烈进出69影院| 免费人妻无码不卡中文字幕18禁| 欧美人成在线播放网站免费|