Entity Framework 5 & Migrations
-
Upload
waldyr-felix -
Category
Technology
-
view
4.367 -
download
0
description
Transcript of Entity Framework 5 & Migrations
Entity Framework Code First&
Migrations
Waldyr FelixALM Ranger / Arquiteto de [email protected]/blog@WaldyrFelix
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
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
Convenções do Code First
Chave Primária definida como “Id” ou “CategoryId”
Relacionamento é inferido
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ó...
Demo: Primeiros passos
1. Criando as Entidades2. Criando o DbContext3. Gerenciando o contexto4. Gerando o banco de dados
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
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
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
Relacionamentos 1..1
One-to-one
Relacionamentos 1..N
One-to-many
Relacionamentos N..N
Many-to-many
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
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
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>());
Demo: Configurando a inicialização
1. Criando inicialização da base 2. Customizando inicialização da base 3. Visualizando dados criados na base
PROBLEMA
• Qualquer alteração envolve recriação inteira da base de dados
• Inviável para usar em ambientes de produção
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
Começando com Migrations
• Também é possível habilitar migrações automáticas, da seguinte forma
PM> Enable-Migrations -EnableAutomaticMigrations
Demo habilitando Migrations
1. Habilitando Migrations em um modelo já existente
2. Visualizando alterações no projeto3. Explorando o 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
Adicionando uma nova Migration
• O formato do comando:–Comando + nome da migration
PM> Add-Migration Add-Produto-DataDeCriacao
Aplicando atualizações no banco
• Formato do comando:– Comando + parâmetros (opcional)
PM> Update-Database
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
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
Fazendo Downgrade
ou
PM> Update-Database –TargetMigration:“Migration" –Force
PM> Update-Database –TargetMigration: $InitialDatabase –Force
Demo downgrade do banco
1. Downgrade para uma migration2. Restaurando a base para o estado original3. Voltando para versão atual
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
Gerando Scripts
ou
PM> Update-Database -Script
PM> Update-Database –Script –SourceMigration:$InitialDatabase
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
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>());