Por fim, vamos criar a primeira versão da migração com a tabela de exemplo e suas colunas correspondentes.
Versão Base
Para evitar a duplicação de código, vamos criar uma versão base.
No diretório Migrations/, crie a classe VersaoBase:
public class VersaoBase
{
// Este é um método estático chamado InserirColunasPadrao.
// Ele recebe um parâmetro do tipo ICreateTableWithColumnOrSchemaOrDescriptionSyntax chamado 'tabela'.
public static ICreateTableColumnOptionOrWithColumnSyntax InserirColunasPadrao(ICreateTableWithColumnOrSchemaOrDescriptionSyntax tabela)
{
// Aqui, estamos adicionando colunas à tabela passada como parâmetro.
// A coluna "Id" é do tipo Int64, é a chave primária e é autoincrementada.
// A coluna "DataCriacao" é do tipo DateTime e não pode ser nula.
return tabela
.WithColumn("Id").AsInt64().PrimaryKey().Identity()
.WithColumn("DataCriacao").AsDateTime().NotNullable();
}
}Ao criar novas versões, utilizamos o método acima, passando o tipo que recebe e o nome da tabela a ser criada.
Enum
Também vamos criar um Enum com os números das versões para passar via atributo, juntamente com a descrição.
No diretório Migrations/, adicione:
public enum NumeroVersoes
{
CriarTabelaAdmin = 1
}Primeira versão
No diretório Migrations/Versoes, crie a classe Versao0000001.
Observação: Para padronizar as versões utilize o nome “Versao” + 000000 + Número da versão
A classe deve herdar de Migration e sobrescrever seus métodos:
public class Versao0000001 : Migration
{
public override void Down() { }
public override void Up() { }
}Vamos criar a tabela utilizando a versão base e passando o Create.Table( ) com o nome da tabela como parâmetros:
public class Versao0000001 : Migration
{
public override void Down() { }
public override void Up()
{
var tabela = VersaoBase.InserirColunasPadrao(Create.Table("Admins"));
}
}Agora, vamos adicionar as respectivas colunas:
public class Versao0000001 : Migration
{
public override void Down() { }
public override void Up()
{
var tabela = VersaoBase.InserirColunasPadrao(Create.Table("Admins"));
tabela
.WithColumn("Nome").AsString(100).NotNullable()
.WithColumn("Email").AsString().NotNullable()
.WithColumn("Senha").AsString(2000).NotNullable()
.WithColumn("Telefone").AsString(14).NotNullable()
.WithColumn("Administrador").AsBoolean().WithDefaultValue(true).NotNullable();
}
}Lembre-se de passar o atributo com o número da versão e a descrição:
[Migration((long)NumeroVersoes.CriarTabelaAdmin, "Cria tabela admin")]
public class Versao0000001 : Migration
{
public override void Down() { }
public override void Up()
{
var tabela = VersaoBase.InserirColunasPadrao(Create.Table("Admins"));
tabela
.WithColumn("Nome").AsString(100).NotNullable()
.WithColumn("Email").AsString().NotNullable()
.WithColumn("Senha").AsString(2000).NotNullable()
.WithColumn("Telefone").AsString(14).NotNullable()
.WithColumn("Administrador").AsBoolean().WithDefaultValue(true).NotNullable();
}
}Pronto! Ao executar o projeto, as migrações serão geradas no banco de dados. Sempre que o projeto for iniciado, será verificado se existem migrações pendentes.