.NET Database Migration Toolkit

My current pet project is a language-independent database migration library ( Wizardby in Google Code). This is largely inspired by ActiveRecord Migrations, but has a few subtleties. For example, it does some basic "type inference", so you do not need to specify the column type FK. He is also smart enough to generate “downgrade” scenarios, given only the “upgrade” sequence. Although the migration is written in a special DSL, this tool is primarily aimed at .NET projects. It is also database independent.

Here is a quick look at the syntax:

  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

I know other migration libraries, but hey, this is a pet project!

: ?

+3
3

, , .

, , .

  • , . ( )
  • SQL-.
  • ,

, .., , . , !

+2

. . ?

(, ).

+6

, . , , 3 "". 4 5 , - "Johnny Q Expert" "Media". 6, "" ( ) - , , 1 5, , .

+3

Source: https://habr.com/ru/post/1703491/


All Articles