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?

Scripts Entity Framework

  • 1.
  • 2.
    SQL Internal Ops Conference PriscilaMayumi Sato Microsoft Community Contributor (MCC) http://dev.mayogax.me/ @MayogaX Scrips gerados pelo Entity Framework
  • 3.
    SQL Internal Ops Conference OEntity 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ãoconfio 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 MasORMs 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 Ecomo 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 Ese 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 OEntity 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 Ea 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 Ocó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 Exemplode 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
  • 14.
  • 15.