Fluent Migrations e Schema Metadata extraction

7 views
Skip to first unread message

Juan Pedro A. Lopes

unread,
Dec 18, 2009, 10:02:09 PM12/18/09
to dotnetar...@googlegroups.com
Galera, eu andei precisando de uma biblioteca de metadata extraction há pouco tempo, pra colocar nos meus templates T4. Acabei encontrando o projeto dbschema.codeplex.com. Entretanto, ele tinha um código bem pouco orientado a objetos. Fiz um fork, dei uma reestruturada nele, fiz um merge com o projeto de interface fluente pro Migrator.Net. Vi que estava uma biblioteca legal, e coloquei num projeto. Chamei de Schema.Net. Ele ainda está bastante instável, mas está bastante interessante.

Atualmente, está virtualmente suportando extração de metadados de bancos SqlServer, Oracle, MySQL, Postgree, SQLite, SqlServerCE, OleDb e VistaDB, assim como o antigo DbSchema já permitia. Entretanto, agora a API é orientada a objetos e encapsula bem os milhões de DataTable que haviam no código original.

Além disso, escrevi um wrapper pra API do Migrator.Net (esse foi do zero, XD), e agora ele suporta migrations como:

[Migration(20091219005030)]
public class add_sample_tables_for_dna_guys : FluentMigration
{
    public override void Up()
    {
        Schema.AddTable("tabela_exemplo", false, t =>
        {
            t.AddInt32("id1").PrimaryKey();
            t.AddString("id2").PrimaryKey();

            t.AddDateTime("field1");
        });

        Schema.AddTable("tabela_relacionada", false, t =>
        {
            t.AutoForeignKey("tabela_exemplo",
                t.AddInt32("id1").PrimaryKey().LinkedTo("id1"),
                t.AddString("id2").LinkedTo("id2"));

            t.UniqueColumns("uk_teste",
                t.AddInt32("campo_unico_1"),
                t.AddSingle("campo_unico_2"));

            t.AddDateTime("field2");
        });

    }

    public override void Down()
    {
        Schema.RemoveTable("tabela_relacionada");
        Schema.RemoveTable("tabela_exemplo");
    }
}

Eu precisei de algo desse tipo por muito tempo. Acredito que vocês também possam precisar.

O único problema é que o projeto está sem testes atualmente. Pensei em deixar os testes unitários de lado e passar pra alguns testes de integração, migrando um banco até um certo estado e garantindo que a biblioteca consegue ler esses dados corretamente. Entretanto, o tempo anda curto. Alguém se dispõe a ajudar?

Aqui está o link do projeto. Quem quiser role de committer, é só pedir.

-- 
Kind regards,
Juan Lopes

juanp...@gmail.com
con...@juanlopes.net
http://juanlopes.net
http://twitter.com/juanplopes

"E se o mundo não corresponde em todos os aspectos a nossos desejos, é culpa da ciência ou dos que querem impor seus desejos ao mundo?" - Carl Sagan
Reply all
Reply to author
Forward
0 new messages