EF Core - Populando dados iniciais (Data Seed) - III
Hoje vamos continuar abordando o recurso disponível a partir da versão 2.1 do EF Core que facilita a alimentação das tabelas criadas com dados iniciais. |
Na segunda parte do artigo mostrei como usar o método HasData para alimentar tabelas relacionadas com dados iniciais.
Podemos também adicionar ou alterar dados de inicialização durante migrações subseqüentes. O Entity Framework Core vai comparar os dados no banco de dados e vai gerar os métodos apropriados de inserção, atualização e exclusão.
Vamos continuar usando o projeto do artigo anterior e agora vamos criar uma entidade Pais onde vamos armazenar o nome alguns paises.
Nota: Veja como criar o projeto de exemplo usado neste artigo aqui.
1- Classe Pais
public class Pais
{
public int Id { get; set; }
public string Nome { get; set; }
}
|
A seguir precisamos incluir no arquvo de contexto AppDbContext o DBSet<> para mapear a entidade para a tabela Paises:
public virtual DbSet<Pais> Paises { get; set; }
Para popular a tabela Paises com dados iniciais
podemos criar uma classe com um método estático passando o contexto usado e usar
o método SaveChanges para incluir os dados.
Vamos criar uma classe DataInitializer e o método SeedPaises() conforme mostrado a seguir:
using System.Collections.Generic;
using System.Linq;
namespace ConsoleEFCore1.Models
{
public class DataInitializer
{
public static void SeedPaises(AppDbContext context)
{
if (!context.Paises.Any())
{
var paises = new List<Pais>
{
new Pais { Nome = "Albania" },
new Pais { Nome = "Angola" },
new Pais { Nome = "Argentina" },
new Pais { Nome = "Armenia" },
new Pais { Nome = "Australia" },
new Pais { Nome = "Austria" },
new Pais { Nome = "Brasil" },
new Pais { Nome = "Canada"},
};
context.AddRange(paises);
context.SaveChanges();
}
}
}
}
|
A seguir temos que aplicar o Migration para gerar o script de migração:
E aplicar o migration para criar a tabela Paises:
Agora podemos definir o código que vai invocar o método SeedPaises() da classe DataInitializer no método Main();
static void Main(string[] args)
{
using (var _context = new AppDbContext())
{
DataInitializer.SeedPaises(_context);
var paises = _context.Paises.ToList();
foreach(var pais in paises)
{
Console.WriteLine(pais.Nome);
}
}
Console.ReadLine();
}
|
Estamos inicializando a tabela com dados e a seguir exibindo o seu conteúdo. O resultado obtido será:
Na próxima parte do artigo veremos uma forma melhor de aplicar a configuração e alimentar as tabelas.
Pegue o projeto aqui: ConsoleEFCore1_SeedData3.zip (sem as referências)
"No princípio
era o Verbo, e o Verbo estava com Deus, e o Verbo era Deus.
Ele estava no princípio com Deus.
Todas as coisas foram feitas por ele, e sem ele nada do que foi feito se fez."
João 1:1-3
Referências: