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