Entity Framework 5 & Migrations

32
Entity Framework Code First & Migrations Waldyr Felix ALM Ranger / Arquiteto de software [email protected] waldyrfelix.net/blog @WaldyrFelix

description

 

Transcript of Entity Framework 5 & Migrations

Page 1: Entity Framework 5 & Migrations

Entity Framework Code First&

Migrations

Waldyr FelixALM Ranger / Arquiteto de [email protected]/blog@WaldyrFelix

Page 2: Entity Framework 5 & Migrations

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

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

Convenções do Code First

Chave Primária definida como “Id” ou “CategoryId”

Relacionamento é inferido

Page 5: Entity Framework 5 & Migrations

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

Demo: Primeiros passos

1. Criando as Entidades2. Criando o DbContext3. Gerenciando o contexto4. Gerando o banco de dados

Page 7: Entity Framework 5 & Migrations

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

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

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

Relacionamentos 1..1

One-to-one

Page 11: Entity Framework 5 & Migrations

Relacionamentos 1..N

One-to-many

Page 12: Entity Framework 5 & Migrations

Relacionamentos N..N

Many-to-many

Page 13: Entity Framework 5 & Migrations

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

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

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

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

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

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

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

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

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

Adicionando uma nova Migration

• O formato do comando:–Comando + nome da migration

PM> Add-Migration Add-Produto-DataDeCriacao

Page 23: Entity Framework 5 & Migrations

Aplicando atualizações no banco

• Formato do comando:– Comando + parâmetros (opcional)

PM> Update-Database

Page 24: Entity Framework 5 & Migrations

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

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

Fazendo Downgrade

ou

PM> Update-Database –TargetMigration:“Migration" –Force

PM> Update-Database –TargetMigration: $InitialDatabase –Force

Page 27: Entity Framework 5 & Migrations

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

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

Gerando Scripts

ou

PM> Update-Database -Script

PM> Update-Database –Script –SourceMigration:$InitialDatabase

Page 30: Entity Framework 5 & Migrations

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

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>());

Page 32: Entity Framework 5 & Migrations

Obrigado

Blog: waldyrfelix.net/blog

Twitter: @WaldyrFelix

Email: [email protected]

Duvidas?