Entity Framework 5 & Migrations

3.990 visualizações

Publicada em

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
3.990
No SlideShare
0
A partir de incorporações
0
Número de incorporações
105
Ações
Compartilhamentos
0
Downloads
48
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Entity Framework 5 & Migrations

  1. 1. Entity Framework Code First & MigrationsWaldyr FelixALM Ranger / Arquiteto de softwarewaldyrfelix@2pc.com.brwaldyrfelix.net/blog@WaldyrFelix
  2. 2. Entity Framework 5• Possibilidade de fazer tudo via código• Mais produtividade• Criação simplificada do DbContext• Entidades limpas• Geração automática do banco de dados• Migrations• Suporte a Enums
  3. 3. Como funciona o Code First• Enquanto os outros métodos geram meta dados em memória a partir do EDMX – XML -> EntityType, AssociationType, EdmType, etc• Code First gera os mesmos meta dados a partir do código – Classes -> EntityType, AssociationType, EdmType, Database, etc• Para isso o EF Code First usa Data Annotations e/ou Fluent API
  4. 4. Convenções do Code First Chave Primária definida como “Id” ou “CategoryId”Relacionamento é inferido
  5. 5. Instalando o Code First1. Opção: via download no site – http://msdn.com/data/ef – Baixar e instalar – Referenciar DLL no projeto2. Opção: via NuGet – PM> Install-Package EntityFramework – E só...
  6. 6. Demo: Primeiros passos1. Criando as Entidades2. Criando o DbContext3. Gerenciando o contexto4. Gerando o banco de dados
  7. 7. Porque configurar mapeamentos?• Quando as convenções não atendem aos requisitos – Acontece frequentemente por sinal – Exemplo: string mapeado para nvarchar(max)• Melhorar performance do banco• Mudar tipos de dados que precisamos usar
  8. 8. Tipos de mapeamentos Data Annotations Fluent API• Usa atributos nas • Usa métodos classes e propriedades encadeados fora das• “Suja” o model com entidades metadados • Necessário mais código
  9. 9. Demo: Configurando com Fluent API1. Definindo tamanho máximo2. Definindo campos obrigatórios (not null)3. Definindo nome da tabela e colunas4. Definindo tipo das colunas5. Usando tipos complexos
  10. 10. Relacionamentos 1..1One-to-one
  11. 11. Relacionamentos 1..NOne-to-many
  12. 12. Relacionamentos N..NMany-to-many
  13. 13. Separando as configurações• Quanto mais entidades tiver meu projeto maior e mais confuso vai ficar meu OnModelCreating• Solução: Criar configurações específicas de cada entidade em sua própria classe de configuração – Deve herdar de EntityTypeConfiguration – As configurações passam para o construtor dessa classe
  14. 14. Demo: Definindo configurações de entidades1. Criando classes de configuração2. Realizando as configurações3. Deixando as configurações visiveis ao EF4. Configurando o relacionamento
  15. 15. Estratégias de criação da base• É possivel modificar a forma como o EF cria o banco de dados através da classe Database• Os métodos possiveis são: – DropCreateDatabaseAlways – CreateDatabaseIfNotExists – DropCreateDatabaseIfModelChangesDatabase.SetInitializer( new DropCreateDatabaseIfModelChanges<DemoContext>());
  16. 16. Demo: Configurando a inicialização1. Criando inicialização da base2. Customizando inicialização da base3. Visualizando dados criados na base
  17. 17. PROBLEMA• Qualquer alteração envolve recriação inteira da base de dados• Inviável para usar em ambientes de produção
  18. 18. Começando com Migrations• Através do console do NuGet é possível executar comandos para o EF para habilitar o uso do Migrations PM> Enable-Migrations
  19. 19. Começando com Migrations• Também é possível habilitar migrações automáticas, da seguinte formaPM> Enable-Migrations -EnableAutomaticMigrations
  20. 20. Demo habilitando Migrations1. Habilitando Migrations em um modelo já existente2. Visualizando alterações no projeto3. Explorando o Migrations
  21. 21. Comandos• Existem basicamente dois comandos que podem ser usados: – Add-Migration: que irá procurar pelas modificações realizadas até então e adicionar uma nova migration – Update-Database: aplica as alterações pendentes no banco de dados, a partir das migrations já adicionadas ou infere as alterações automaticamente
  22. 22. Adicionando uma nova Migration• O formato do comando: – Comando + nome da migration PM> Add-Migration Add-Produto-DataDeCriacao
  23. 23. Aplicando atualizações no banco• Formato do comando: – Comando + parâmetros (opcional) PM> Update-Database
  24. 24. Demo comandos1. Criando mais uma propriedade no modelo2. Aplicar as alterações automaticamente3. Criando uma nova Migration4. Aplicando as alterações a partir dessa nova Migration
  25. 25. Upgrade/Downgrade• Upgrade é feito quase que automaticamente• Mas é possível aplicar uma versão anterior (downgrade)• Para isso existem parâmetros especiais que podem ser usados – TargetMigration: indica para qual migration a base deve atualizar – Force: indica que mesmo havendo perda de dados o comando deve ser executado
  26. 26. Fazendo Downgrade PM> Update-Database –TargetMigration:“Migration" –Force ouPM> Update-Database –TargetMigration: $InitialDatabase –Force
  27. 27. Demo downgrade do banco1. Downgrade para uma migration2. Restaurando a base para o estado original3. Voltando para versão atual
  28. 28. Gerando Scripts• Além de aplicar automaticamente as alterações, é possível gerar o script dos mesmos• Para isso basta modificar o comando adicionando um novo parâmetro -Script
  29. 29. Gerando Scripts PM> Update-Database -Script ouPM> Update-Database –Script –SourceMigration:$InitialDatabase
  30. 30. Demo gerando scripts1. Gerando um script com todas as alterações de migração2. Gerando um script específico para uma versão
  31. 31. Automatizando a migração• É possível automatizar o upgrade da aplicação com migrations• Para isso usamos o esquema de inicialização da baseDatabase.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());
  32. 32. Duvidas?Blog: waldyrfelix.net/blogTwitter: @WaldyrFelixEmail: waldyrfelix@2pc.com.br Obrigado

×