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?
--