SlideShare uma empresa Scribd logo
1 de 15
SQL Internal
Ops
Conference
SQL Internal Ops
Conference
Priscila Mayumi Sato
Microsoft Community Contributor (MCC)
http://dev.mayogax.me/
@MayogaX
Scrips gerados pelo
Entity Framework
SQL Internal Ops
Conference
O Entity Framework é um Object-relational mapping, ou seja, ele
mapeia um banco de dados relacional para objetos e cuida do meio
de caminho entre uma aplicação (C#) e um banco de dados (SQL)
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
Entity Framework,
chamado pelo time da
Ado.Net como “Magic
Unicorn”
SQL Internal Ops
Conference
“Não confio em ORM gerando script pro meu banco”
-by DBA ciumento em uma mesa de bar
“Scripts de ORMs são melhores que scrips de humanos”
-by programador C# em uma thread do .NetBr
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
Mas ORMs só geram código de leitura, atualização e exclusão de
linhas, né? Então qual o problema?
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
[Extent1].[Description] AS [Description]
FROM [dbo].[Mangas] AS [Extent1]
SQL Internal Ops
Conference
E como eu pego essas querys, tia?
Ir debugando seu código C#
Usando a classe:
System.Data.Entity.Infrastructure.DbQuery (por
exemplo)
Exemplo de resultado:
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SELECT
[Extent1].[Id] AS [Id],
[Extent1].[Title] AS [Title],
[Extent1].[Description] AS [Description],
[Extent1].[Mangaka] AS [Mangaka]
FROM [dbo].[Mangas] AS [Extent1]
WHERE 1 = [Extent1].[Id]
SQL Internal Ops
Conference
E se eu te disser que o Entity Framework (e outros ORMs) geram
scripts de criação de base de dados?
E se eu te disser que também criam scripts para alteração de base
de dados?
SQL Internal Ops
Conference
O Entity Framework possui dois caminhos para gerar banco de
dados:
Model First
Code First
Também possui 3 estratégias para geração de banco de dados
DropCreateDatabaseIfModelChanges
CreateDatabaseIfNotExists
DropCreateDatabaseAlways
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
Calma, mas o mundo não está perdido!
Quando o banco é gerado pelo Model First é mostrado o código SQL
antes de gera-lo.
Para gerar o banco definitivamente você precisa rodar o código
gerado
(Ainda dá tempo de muda-lo).
Dá para usar Code First com uma base já existente!
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
-- --------------------------------------------------
-- Creating all tables
-- --------------------------------------------------
-- Creating table Manga'
CREATE TABLE [dbo].[Manga] (
[Id] int IDENTITY(1,1) NOT NULL
);
GO
-- --------------------------------------------------
-- Creating all PRIMARY KEY constraints
-- --------------------------------------------------
-- Creating primary key on [Id] in table „Manga'
ALTER TABLE [dbo].[Manga]
ADD CONSTRAINT [PK_Manga]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
E a tal alteração do banco de dados?
Entity Framework Migrations é um meio de manter um controle de
versões sobre a estrutura (e não os dados) da sua base.
Todo banco de dados gerado pelo Code First possui uma tabela do
sistema chamada _MigrationHistory onde é guardado as mudanças
da estrutura e a versão do Entity Framework.
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
O código das alterações fica em C# numa pasta chamada Migrations
no projeto.
Ao rodar uma migration (atualização ou volta de versão) o banco é
atualizado automaticamente.
Você pode pegar o script da alteração e executa-lo na mão, usando o
parâmetro –script, que mostra numa janela nova o script da
alteração.
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
Exemplo de uso de Migration:
Adicione um campo na sua POCO.
Na console do nuget rode o comando:
Add-Migration NomeMigration
Depois rode o comando:
Update-Database –script
Vai abrir em outra janela o script:
ALTER TABLE [dbo].[Mangas] ADD [Mangaka] [nvarchar](max)
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
SQL Internal Ops
Conference
http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
Obrigada
Dúvidas, sugestões, criticas ou convites para
jogar RPG?

Mais conteúdo relacionado

Destaque

Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíPriscila Mayumi
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven DesignRafael Ponte
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETEduardo Pires
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e PráticaEduardo Pires
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrationsPriscila Mayumi
 
Do 0 a estar online no Google App Engine
Do 0 a estar online no Google App EngineDo 0 a estar online no Google App Engine
Do 0 a estar online no Google App EnginePriscila Mayumi
 

Destaque (7)

Microsoft MTACs
Microsoft MTACsMicrosoft MTACs
Microsoft MTACs
 
Bolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aíBolovo - problema antigo de arquitetura de software - não use por aí
Bolovo - problema antigo de arquitetura de software - não use por aí
 
Entendendo Domain-Driven Design
Entendendo Domain-Driven DesignEntendendo Domain-Driven Design
Entendendo Domain-Driven Design
 
ASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NETASP.NET Identity - O Novo componente de Membership do ASP.NET
ASP.NET Identity - O Novo componente de Membership do ASP.NET
 
SOLID - Teoria e Prática
SOLID - Teoria e PráticaSOLID - Teoria e Prática
SOLID - Teoria e Prática
 
Entity framework migrations
Entity framework migrationsEntity framework migrations
Entity framework migrations
 
Do 0 a estar online no Google App Engine
Do 0 a estar online no Google App EngineDo 0 a estar online no Google App Engine
Do 0 a estar online no Google App Engine
 

Semelhante a EF Scripts e Migrações

CCS COMPILADOR - PARTE II
CCS COMPILADOR -  PARTE IICCS COMPILADOR -  PARTE II
CCS COMPILADOR - PARTE IISaldit Software
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Mozart Diniz
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Rodrigo Kono
 
InCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Ramon Durães
 
2006 - FrameWorkdotNET Ricardo Guerra.ppt
2006 - FrameWorkdotNET Ricardo Guerra.ppt2006 - FrameWorkdotNET Ricardo Guerra.ppt
2006 - FrameWorkdotNET Ricardo Guerra.pptRicardo Guerra Freitas
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Microsoft .Net
Microsoft .NetMicrosoft .Net
Microsoft .Netjaumnc
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google driveffabii
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework CoreCaio Lorensetti
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Alessandro Almeida
 
Seven_Palestra_Banco_Dados_Servidores
Seven_Palestra_Banco_Dados_ServidoresSeven_Palestra_Banco_Dados_Servidores
Seven_Palestra_Banco_Dados_ServidoresCleber Tavares Jr.
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Fernando Henrique
 
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ....NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...Renato Groffe
 

Semelhante a EF Scripts e Migrações (20)

.NET Micro Framework
.NET Micro Framework.NET Micro Framework
.NET Micro Framework
 
Proteus anacom
Proteus anacomProteus anacom
Proteus anacom
 
CCS COMPILADOR - PARTE II
CCS COMPILADOR -  PARTE IICCS COMPILADOR -  PARTE II
CCS COMPILADOR - PARTE II
 
Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?Como desenvolver com um sistema com um front-end colossal?
Como desenvolver com um sistema com um front-end colossal?
 
Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3Surpreenda-se com o Silverlight 3
Surpreenda-se com o Silverlight 3
 
InCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP EspecificaçãoInCuca - Coding dojo - ERP Especificação
InCuca - Coding dojo - ERP Especificação
 
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
Introdução ao ASP.NET 3.5 - Campus Party Brasil 2009
 
Sql01 final
Sql01 finalSql01 final
Sql01 final
 
2006 - FrameWorkdotNET Ricardo Guerra.ppt
2006 - FrameWorkdotNET Ricardo Guerra.ppt2006 - FrameWorkdotNET Ricardo Guerra.ppt
2006 - FrameWorkdotNET Ricardo Guerra.ppt
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Microsoft .Net
Microsoft .NetMicrosoft .Net
Microsoft .Net
 
Mapeamento brb 2013 em videoaulas do provas de ti google drive
Mapeamento brb 2013 em videoaulas do provas de ti   google driveMapeamento brb 2013 em videoaulas do provas de ti   google drive
Mapeamento brb 2013 em videoaulas do provas de ti google drive
 
Banco de Dados no Visual Studio
Banco de Dados no Visual StudioBanco de Dados no Visual Studio
Banco de Dados no Visual Studio
 
Migrations com Entity Framework Core
Migrations com Entity Framework CoreMigrations com Entity Framework Core
Migrations com Entity Framework Core
 
Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6Engenharia de Software I - Aula 6
Engenharia de Software I - Aula 6
 
Seven_Palestra_Banco_Dados_Servidores
Seven_Palestra_Banco_Dados_ServidoresSeven_Palestra_Banco_Dados_Servidores
Seven_Palestra_Banco_Dados_Servidores
 
Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0Principais novidades do Entity Framework 5.0
Principais novidades do Entity Framework 5.0
 
Redes2 aula02
Redes2 aula02Redes2 aula02
Redes2 aula02
 
Introdução Play framework
Introdução Play frameworkIntrodução Play framework
Introdução Play framework
 
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ....NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
.NET 7: principais novidades no Desenvolvimento Back-End | Visual Studio Summ...
 

Mais de Priscila Mayumi

OOD - Princípio Open/Closed
OOD - Princípio Open/ClosedOOD - Princípio Open/Closed
OOD - Princípio Open/ClosedPriscila Mayumi
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaPriscila Mayumi
 
Sistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingSistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingPriscila Mayumi
 
Oportunidades para desenvolvedores
Oportunidades para desenvolvedoresOportunidades para desenvolvedores
Oportunidades para desenvolvedoresPriscila Mayumi
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafosPriscila Mayumi
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonPriscila Mayumi
 

Mais de Priscila Mayumi (10)

OOD - Princípio Open/Closed
OOD - Princípio Open/ClosedOOD - Princípio Open/Closed
OOD - Princípio Open/Closed
 
Hangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade únicaHangout OOD – princípio da responsabilidade única
Hangout OOD – princípio da responsabilidade única
 
Sistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computingSistemas de recomendações e neo4J na cloud computing
Sistemas de recomendações e neo4J na cloud computing
 
Conhecendo o Firefox OS
Conhecendo o Firefox OSConhecendo o Firefox OS
Conhecendo o Firefox OS
 
Oportunidades para desenvolvedores
Oportunidades para desenvolvedoresOportunidades para desenvolvedores
Oportunidades para desenvolvedores
 
PHP no Windows Azure
PHP no Windows AzurePHP no Windows Azure
PHP no Windows Azure
 
Banco de dados de grafos
Banco de dados de grafosBanco de dados de grafos
Banco de dados de grafos
 
Ninja migrations
Ninja migrationsNinja migrations
Ninja migrations
 
Ruby versus Python
Ruby versus PythonRuby versus Python
Ruby versus Python
 
Apresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação PythonApresentando a Linguagem de Programação Python
Apresentando a Linguagem de Programação Python
 

EF Scripts e Migrações

  • 2. SQL Internal Ops Conference Priscila Mayumi Sato Microsoft Community Contributor (MCC) http://dev.mayogax.me/ @MayogaX Scrips gerados pelo Entity Framework
  • 3. SQL Internal Ops Conference O Entity Framework é um Object-relational mapping, ou seja, ele mapeia um banco de dados relacional para objetos e cuida do meio de caminho entre uma aplicação (C#) e um banco de dados (SQL) http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport Entity Framework, chamado pelo time da Ado.Net como “Magic Unicorn”
  • 4. SQL Internal Ops Conference “Não confio em ORM gerando script pro meu banco” -by DBA ciumento em uma mesa de bar “Scripts de ORMs são melhores que scrips de humanos” -by programador C# em uma thread do .NetBr http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 5. SQL Internal Ops Conference Mas ORMs só geram código de leitura, atualização e exclusão de linhas, né? Então qual o problema? SELECT [Extent1].[Id] AS [Id], [Extent1].[Title] AS [Title], [Extent1].[Description] AS [Description] FROM [dbo].[Mangas] AS [Extent1]
  • 6. SQL Internal Ops Conference E como eu pego essas querys, tia? Ir debugando seu código C# Usando a classe: System.Data.Entity.Infrastructure.DbQuery (por exemplo) Exemplo de resultado: http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport SELECT [Extent1].[Id] AS [Id], [Extent1].[Title] AS [Title], [Extent1].[Description] AS [Description], [Extent1].[Mangaka] AS [Mangaka] FROM [dbo].[Mangas] AS [Extent1] WHERE 1 = [Extent1].[Id]
  • 7. SQL Internal Ops Conference E se eu te disser que o Entity Framework (e outros ORMs) geram scripts de criação de base de dados? E se eu te disser que também criam scripts para alteração de base de dados?
  • 8. SQL Internal Ops Conference O Entity Framework possui dois caminhos para gerar banco de dados: Model First Code First Também possui 3 estratégias para geração de banco de dados DropCreateDatabaseIfModelChanges CreateDatabaseIfNotExists DropCreateDatabaseAlways http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 9. SQL Internal Ops Conference Calma, mas o mundo não está perdido! Quando o banco é gerado pelo Model First é mostrado o código SQL antes de gera-lo. Para gerar o banco definitivamente você precisa rodar o código gerado (Ainda dá tempo de muda-lo). Dá para usar Code First com uma base já existente! http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 10. SQL Internal Ops Conference -- -------------------------------------------------- -- Creating all tables -- -------------------------------------------------- -- Creating table Manga' CREATE TABLE [dbo].[Manga] ( [Id] int IDENTITY(1,1) NOT NULL ); GO -- -------------------------------------------------- -- Creating all PRIMARY KEY constraints -- -------------------------------------------------- -- Creating primary key on [Id] in table „Manga' ALTER TABLE [dbo].[Manga] ADD CONSTRAINT [PK_Manga] PRIMARY KEY CLUSTERED ([Id] ASC); GO http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 11. SQL Internal Ops Conference E a tal alteração do banco de dados? Entity Framework Migrations é um meio de manter um controle de versões sobre a estrutura (e não os dados) da sua base. Todo banco de dados gerado pelo Code First possui uma tabela do sistema chamada _MigrationHistory onde é guardado as mudanças da estrutura e a versão do Entity Framework. http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 12. SQL Internal Ops Conference O código das alterações fica em C# numa pasta chamada Migrations no projeto. Ao rodar uma migration (atualização ou volta de versão) o banco é atualizado automaticamente. Você pode pegar o script da alteração e executa-lo na mão, usando o parâmetro –script, que mostra numa janela nova o script da alteração. http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport
  • 13. SQL Internal Ops Conference Exemplo de uso de Migration: Adicione um campo na sua POCO. Na console do nuget rode o comando: Add-Migration NomeMigration Depois rode o comando: Update-Database –script Vai abrir em outra janela o script: ALTER TABLE [dbo].[Mangas] ADD [Mangaka] [nvarchar](max) http://www.dailymotion.com/video/xh47ia_sara-varone-surf_sport