SlideShare ist ein Scribd-Unternehmen logo
1 von 32
Entity Framework Code First
                      &
                  Migrations

Waldyr Felix
ALM Ranger / Arquiteto de software
waldyrfelix@2pc.com.br
waldyrfelix.net/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 Entidades
2.   Criando o DbContext
3.   Gerenciando o contexto
4.   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 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
Demo: Configurando com Fluent API
1.   Definindo tamanho máximo
2.   Definindo campos obrigatórios (not null)
3.   Definindo nome da tabela e colunas
4.   Definindo tipo das colunas
5.   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ção
2.   Realizando as configurações
3.   Deixando as configurações visiveis ao EF
4.   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 projeto
3. 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 automaticamente
3. Criando uma nova Migration
4. 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

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




                            ou


PM> Update-Database –TargetMigration: $InitialDatabase –Force
Demo downgrade do banco
1. Downgrade para uma migration
2. Restaurando a base para o estado original
3. 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

            PM> Update-Database -Script



                             ou

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>());
Duvidas?
Blog: waldyrfelix.net/blog
Twitter: @WaldyrFelix
Email: waldyrfelix@2pc.com.br



                        Obrigado

Weitere ähnliche Inhalte

Ähnlich wie Entity Framework 5 & Migrations

BluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsBluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsRafael Leonhardt
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosRodolfo Fadino Junior
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework CoreCaio Lorensetti
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrationsPriscila Mayumi
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Vinícius de Paula
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Jaime Neto
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Renato Groff
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Daniel Makiyama
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Renato Groff
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPMarcelo Andrade
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeRafael Benevides
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de CakephpCauan Cabral
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkLuciano Condé
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Alexandre Tarifa
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisrafaelberlanda
 

Ähnlich wie Entity Framework 5 & Migrations (20)

BluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First MigrationsBluDotNet - Entity Framework Code First Migrations
BluDotNet - Entity Framework Code First Migrations
 
Desenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São CarlosDesenvolvimento web com .NET Core - Meetup São Carlos
Desenvolvimento web com .NET Core - Meetup São Carlos
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework Core
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrations
 
Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.Desenvolvimento Web com Simfony Framework.
Desenvolvimento Web com Simfony Framework.
 
Seu framework é melhor pra quê?
Seu framework é melhor pra quê?Seu framework é melhor pra quê?
Seu framework é melhor pra quê?
 
Cake Php
Cake PhpCake Php
Cake Php
 
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
Kubernetes de ponta a ponta: do Pod ao Deployment Automatizado - Janeiro-2020
 
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
Aprendendo Na Prática: Aplicativos Web Com Asp.Net MVC em C# e Entity Framewo...
 
Palestra
PalestraPalestra
Palestra
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
Construindo aplicações Web escaláveis com Docker e o Microsoft Azure - Azure ...
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Desenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHPDesenvolvimento para a Web com CakePHP
Desenvolvimento para a Web com CakePHP
 
CDI Extensions e DeltaSpike
CDI Extensions e DeltaSpikeCDI Extensions e DeltaSpike
CDI Extensions e DeltaSpike
 
Introdução ao DotNetNuke
Introdução ao DotNetNukeIntrodução ao DotNetNuke
Introdução ao DotNetNuke
 
Minicurso de Cakephp
Minicurso de CakephpMinicurso de Cakephp
Minicurso de Cakephp
 
Deep Dive sobre Entity Framework
Deep Dive sobre Entity FrameworkDeep Dive sobre Entity Framework
Deep Dive sobre Entity Framework
 
Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010Dev401 novos recursos do microsoft visual basic 2010
Dev401 novos recursos do microsoft visual basic 2010
 
Joomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portaisJoomla Day Brasil 2010: Customizações para grandes portais
Joomla Day Brasil 2010: Customizações para grandes portais
 

Mehr von Waldyr Felix

Apache Kafka: Comunicando microsserviços com performance
Apache Kafka: Comunicando microsserviços com performanceApache Kafka: Comunicando microsserviços com performance
Apache Kafka: Comunicando microsserviços com performanceWaldyr Felix
 
Kubernetes: Escalando containers do Docker
Kubernetes: Escalando containers do DockerKubernetes: Escalando containers do Docker
Kubernetes: Escalando containers do DockerWaldyr Felix
 
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...Waldyr Felix
 
HTTP/2. O que você precisa saber a nova versão do HTTP.
HTTP/2. O que você precisa saber a nova versão do HTTP.HTTP/2. O que você precisa saber a nova versão do HTTP.
HTTP/2. O que você precisa saber a nova versão do HTTP.Waldyr Felix
 
ECMAScript 6 / ECMAScript 2015 no Node.js
ECMAScript 6 / ECMAScript 2015 no Node.jsECMAScript 6 / ECMAScript 2015 no Node.js
ECMAScript 6 / ECMAScript 2015 no Node.jsWaldyr Felix
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileWaldyr Felix
 
Microservices com ASP.NET 5
Microservices com ASP.NET 5Microservices com ASP.NET 5
Microservices com ASP.NET 5Waldyr Felix
 
ASP.NET SignalR + SPA com AngularJS
ASP.NET SignalR + SPA com AngularJSASP.NET SignalR + SPA com AngularJS
ASP.NET SignalR + SPA com AngularJSWaldyr Felix
 
Escalando Aplicações com Redis
Escalando Aplicações com RedisEscalando Aplicações com Redis
Escalando Aplicações com RedisWaldyr Felix
 
Sistema de Notificações com SignalR TDC 2014
Sistema de Notificações com SignalR TDC 2014Sistema de Notificações com SignalR TDC 2014
Sistema de Notificações com SignalR TDC 2014Waldyr Felix
 
ASP.NET MVC & Entity Framework
ASP.NET MVC & Entity FrameworkASP.NET MVC & Entity Framework
ASP.NET MVC & Entity FrameworkWaldyr Felix
 
Produtividade na criação de websites com ASP.NET MVC
Produtividade na criação de websites com ASP.NET MVCProdutividade na criação de websites com ASP.NET MVC
Produtividade na criação de websites com ASP.NET MVCWaldyr Felix
 
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APITrilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APIWaldyr Felix
 
Explorando Microsoft Fakes
Explorando Microsoft FakesExplorando Microsoft Fakes
Explorando Microsoft FakesWaldyr Felix
 
Usando Scrum com Team Foundation Server 2012
Usando Scrum com Team Foundation Server 2012Usando Scrum com Team Foundation Server 2012
Usando Scrum com Team Foundation Server 2012Waldyr Felix
 

Mehr von Waldyr Felix (20)

Apache Kafka: Comunicando microsserviços com performance
Apache Kafka: Comunicando microsserviços com performanceApache Kafka: Comunicando microsserviços com performance
Apache Kafka: Comunicando microsserviços com performance
 
Kubernetes: Escalando containers do Docker
Kubernetes: Escalando containers do DockerKubernetes: Escalando containers do Docker
Kubernetes: Escalando containers do Docker
 
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...
A história do LinkApi, como chegamos numa arquitetura para suportar 1 milhão ...
 
HTTP/2. O que você precisa saber a nova versão do HTTP.
HTTP/2. O que você precisa saber a nova versão do HTTP.HTTP/2. O que você precisa saber a nova versão do HTTP.
HTTP/2. O que você precisa saber a nova versão do HTTP.
 
ECMAScript 6 / ECMAScript 2015 no Node.js
ECMAScript 6 / ECMAScript 2015 no Node.jsECMAScript 6 / ECMAScript 2015 no Node.js
ECMAScript 6 / ECMAScript 2015 no Node.js
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento Mobile
 
Microservices com ASP.NET 5
Microservices com ASP.NET 5Microservices com ASP.NET 5
Microservices com ASP.NET 5
 
ASP.NET SignalR + SPA com AngularJS
ASP.NET SignalR + SPA com AngularJSASP.NET SignalR + SPA com AngularJS
ASP.NET SignalR + SPA com AngularJS
 
Escalando Aplicações com Redis
Escalando Aplicações com RedisEscalando Aplicações com Redis
Escalando Aplicações com Redis
 
Sistema de Notificações com SignalR TDC 2014
Sistema de Notificações com SignalR TDC 2014Sistema de Notificações com SignalR TDC 2014
Sistema de Notificações com SignalR TDC 2014
 
ASP.NET MVC 5.x
ASP.NET MVC 5.xASP.NET MVC 5.x
ASP.NET MVC 5.x
 
ASP.NET MVC & Entity Framework
ASP.NET MVC & Entity FrameworkASP.NET MVC & Entity Framework
ASP.NET MVC & Entity Framework
 
ASP.NET WEB API
ASP.NET WEB APIASP.NET WEB API
ASP.NET WEB API
 
Produtividade na criação de websites com ASP.NET MVC
Produtividade na criação de websites com ASP.NET MVCProdutividade na criação de websites com ASP.NET MVC
Produtividade na criação de websites com ASP.NET MVC
 
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web APITrilha .NET - REST na plataforma Microsoft com ASP.NET Web API
Trilha .NET - REST na plataforma Microsoft com ASP.NET Web API
 
Asp.net web api
Asp.net web apiAsp.net web api
Asp.net web api
 
Explorando Microsoft Fakes
Explorando Microsoft FakesExplorando Microsoft Fakes
Explorando Microsoft Fakes
 
ASP.NET Web API
ASP.NET Web APIASP.NET Web API
ASP.NET Web API
 
Usando Scrum com Team Foundation Server 2012
Usando Scrum com Team Foundation Server 2012Usando Scrum com Team Foundation Server 2012
Usando Scrum com Team Foundation Server 2012
 

Entity Framework 5 & Migrations

  • 1. Entity Framework Code First & Migrations Waldyr Felix ALM Ranger / Arquiteto de software waldyrfelix@2pc.com.br waldyrfelix.net/blog @WaldyrFelix
  • 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. 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. Convenções do Code First Chave Primária definida como “Id” ou “CategoryId” Relacionamento é inferido
  • 5. 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ó...
  • 6. Demo: Primeiros passos 1. Criando as Entidades 2. Criando o DbContext 3. Gerenciando o contexto 4. Gerando o banco de dados
  • 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. 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. Demo: Configurando com Fluent API 1. Definindo tamanho máximo 2. Definindo campos obrigatórios (not null) 3. Definindo nome da tabela e colunas 4. Definindo tipo das colunas 5. Usando tipos complexos
  • 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. Demo: Definindo configurações de entidades 1. Criando classes de configuração 2. Realizando as configurações 3. Deixando as configurações visiveis ao EF 4. Configurando o relacionamento
  • 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 – DropCreateDatabaseIfModelChanges Database.SetInitializer( new DropCreateDatabaseIfModelChanges<DemoContext>());
  • 16. Demo: Configurando a inicialização 1. Criando inicialização da base 2. Customizando inicialização da base 3. Visualizando dados criados na base
  • 17. PROBLEMA • Qualquer alteração envolve recriação inteira da base de dados • Inviável para usar em ambientes de produção
  • 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. Começando com Migrations • Também é possível habilitar migrações automáticas, da seguinte forma PM> Enable-Migrations -EnableAutomaticMigrations
  • 20. Demo habilitando Migrations 1. Habilitando Migrations em um modelo já existente 2. Visualizando alterações no projeto 3. Explorando o Migrations
  • 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. Adicionando uma nova Migration • O formato do comando: – Comando + nome da migration PM> Add-Migration Add-Produto-DataDeCriacao
  • 23. Aplicando atualizações no banco • Formato do comando: – Comando + parâmetros (opcional) PM> Update-Database
  • 24. Demo comandos 1. Criando mais uma propriedade no modelo 2. Aplicar as alterações automaticamente 3. Criando uma nova Migration 4. Aplicando as alterações a partir dessa nova Migration
  • 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. Fazendo Downgrade PM> Update-Database –TargetMigration:“Migration" –Force ou PM> Update-Database –TargetMigration: $InitialDatabase –Force
  • 27. Demo downgrade do banco 1. Downgrade para uma migration 2. Restaurando a base para o estado original 3. Voltando para versão atual
  • 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. Gerando Scripts PM> Update-Database -Script ou PM> Update-Database –Script –SourceMigration:$InitialDatabase
  • 30. 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
  • 31. 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>());