entity framework 5 & migrations
DESCRIPTION
TRANSCRIPT
![Page 1: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/1.jpg)
Entity Framework Code First&
Migrations
Waldyr FelixALM Ranger / Arquiteto de [email protected]/blog@WaldyrFelix
![Page 2: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/2.jpg)
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
![Page 3: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/3.jpg)
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
![Page 4: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/4.jpg)
Convenções do Code First
Chave Primária definida como “Id” ou “CategoryId”
Relacionamento é inferido
![Page 5: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/5.jpg)
Instalando o Code First
1. Opção: via download no site– http://msdn.com/data/ef– Baixar e instalar– Referenciar DLL no projeto
2. Opção: via NuGet– PM> Install-Package EntityFramework– E só...
![Page 6: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/6.jpg)
Demo: Primeiros passos
1. Criando as Entidades2. Criando o DbContext3. Gerenciando o contexto4. Gerando o banco de dados
![Page 7: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/7.jpg)
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
![Page 8: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/8.jpg)
Tipos de mapeamentosData Annotations
• Usa atributos nas classes e propriedades
• “Suja” o model com metadados
Fluent API• Usa métodos
encadeados fora das entidades
• Necessário mais código
![Page 9: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/9.jpg)
Demo: Configurando com Fluent API
1. Definindo tamanho máximo2. Definindo campos obrigatórios (not null)3. Definindo nome da tabela e colunas4. Definindo tipo das colunas5. Usando tipos complexos
![Page 10: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/10.jpg)
Relacionamentos 1..1
One-to-one
![Page 11: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/11.jpg)
Relacionamentos 1..N
One-to-many
![Page 12: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/12.jpg)
Relacionamentos N..N
Many-to-many
![Page 13: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/13.jpg)
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
![Page 14: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/14.jpg)
Demo: Definindo configurações de entidades
1. Criando classes de configuração2. Realizando as configurações3. Deixando as configurações visiveis ao EF4. Configurando o relacionamento
![Page 15: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/15.jpg)
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– DropCreateDatabaseIfModelChanges
Database.SetInitializer( new DropCreateDatabaseIfModelChanges<DemoContext>());
![Page 16: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/16.jpg)
Demo: Configurando a inicialização
1. Criando inicialização da base 2. Customizando inicialização da base 3. Visualizando dados criados na base
![Page 17: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/17.jpg)
PROBLEMA
• Qualquer alteração envolve recriação inteira da base de dados
• Inviável para usar em ambientes de produção
![Page 18: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/18.jpg)
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
![Page 19: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/19.jpg)
Começando com Migrations
• Também é possível habilitar migrações automáticas, da seguinte forma
PM> Enable-Migrations -EnableAutomaticMigrations
![Page 20: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/20.jpg)
Demo habilitando Migrations
1. Habilitando Migrations em um modelo já existente
2. Visualizando alterações no projeto3. Explorando o Migrations
![Page 21: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/21.jpg)
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
![Page 22: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/22.jpg)
Adicionando uma nova Migration
• O formato do comando:–Comando + nome da migration
PM> Add-Migration Add-Produto-DataDeCriacao
![Page 23: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/23.jpg)
Aplicando atualizações no banco
• Formato do comando:– Comando + parâmetros (opcional)
PM> Update-Database
![Page 24: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/24.jpg)
Demo comandos
1. Criando mais uma propriedade no modelo
2. Aplicar as alterações automaticamente3. Criando uma nova Migration4. Aplicando as alterações a partir dessa
nova Migration
![Page 25: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/25.jpg)
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
![Page 26: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/26.jpg)
Fazendo Downgrade
ou
PM> Update-Database –TargetMigration:“Migration" –Force
PM> Update-Database –TargetMigration: $InitialDatabase –Force
![Page 27: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/27.jpg)
Demo downgrade do banco
1. Downgrade para uma migration2. Restaurando a base para o estado original3. Voltando para versão atual
![Page 28: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/28.jpg)
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
![Page 29: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/29.jpg)
Gerando Scripts
ou
PM> Update-Database -Script
PM> Update-Database –Script –SourceMigration:$InitialDatabase
![Page 30: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/30.jpg)
Demo gerando scripts
1. Gerando um script com todas as alterações de migração
2. Gerando um script específico para uma versão
![Page 31: Entity Framework 5 & Migrations](https://reader034.vdocuments.mx/reader034/viewer/2022050921/553b38665503466f348b46f2/html5/thumbnails/31.jpg)
Automatizando a migração
• É possível automatizar o upgrade da aplicação com migrations
• Para isso usamos o esquema de inicialização da base
Database.SetInitializer(new MigrateDatabaseToLatestVersion<Context, Configuration>());