当前位置:  开发笔记 > 编程语言 > 正文

.NET数据库迁移工具包

如何解决《.NET数据库迁移工具包》经验,为你挑选了1个好方法。

我目前的宠物项目是一个独立于语言的数据库迁移库(Google Code上的Wizardby).它几乎受到ActiveRecord Migrations的启发,但有一些细节.例如,做一些基本的"类型推断",因此您不必指定FK列的类型.只有"升级"序列才能生成"降级"脚本.尽管迁移是使用特殊的DSL编写的,但此工具主要针对.NET项目.它也是独立于数据库平台的.

以下是语法的快速浏览:

  migration "Blog" revision => 1:
    type-aliases:
      type-alias N type => String, length => 200, nullable => false, default => ""

    defaults:
      default-primary-key ID type => Int32, nullable => false, identity => true

    version 1:
      add table Author:
        FirstName type => N
        LastName type => N
        EmailAddress type => N, unique => true
        Login type => N, unique => true
        Password type => Binary, length => 64, nullable => true

      add table Tag:
        Name type => N

      add table Blog:
        Name type => N
        Description type => String, nullable => false

      add table BlogPost:
        Title type => N
        Slug type => N
        BlogID references => Blog
        AuthorID references => Author

      add table BlogPostTagJunction primary-key => false:
        BlogPostID references => BlogPost
        TagID references => Tag

    version 2:
      add table BlogPostComment:
        BlogPostID references => BlogPost
        AuthorEmailAddress type => N
        Content type => String, nullable => false

    version 3:
      add table Media:
        TypeID type => Int32
        Name type => N
        MimeType type => N
        Length type => Int32
        BlogPostID nullable => true, references => BlogPost
        BlogPostCommentID nullable => true, references => BlogPostComment

      add table User:
        Login type => String, length => 200, nullable => false
        Password type => Binary, length => 64, nullable => false

        index IX_Login columns => [ID, [Login, desc]], unique => true

    version 4:
        add table Forum:
          Name type => String, length => 200, nullable => false
        add column ModeratorUserID nullable => false, references => User

    version 5:
        remove index IX_Login table => User

    version 6:
        add index IX_Login table => User, columns => [ID, [Login, desc]], unique => true

    version 7:
        BlogAuthorJunction primary-key => false:
            BlogID references => Blog
            AuthorID references => Author

        execute native-sql upgrade-resource => InsertSeedData, downgrade-resource => DeleteSeedData

我知道其他迁移库,但嘿,这是一个宠物项目!

问题是:您对数据库迁移工具包的期望是什么?您对这种特定的小狗语法有什么看法?



1> brzozow..:

我喜欢这种语法.在您的示例中,您专注于改变结构.但是数据操作呢?

在迁移时我经常需要修改数据(例如添加一些字典数据).

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有