Grupo Tribalhista - Música Velha Infância (cruzadinha e caça palavras)
Novidades no Entity Framework 4
1. O que há de novo noEntity Framework 4 Marcelo PaivaMicrosoft MCP - IBM CLP
2. Marcelo Paiva Diretor Pesquisa e Desenvolvimento da Softprime http://softprime.com.brMembro do conselho DevGoiás.Net http://devgoias.net Coordenador comunidade DataServicesBR http://dataservicesbrasil.ning.com Email: marcelo@softprime.com.br Twitter: @marcelo_paiva Blog: http://marcelosoftprime.spaces.live.com
3. Agenda Tecnologias de Acesso a dados Entity Framework 4 O que é? História do EF Melhorias do EF Demonstrações Q & A
5. Entity Framework 4.0 – O que é? Ferramenta ORM – Mapenamento objeto relacional Abstrai a comunicação com bancos de dados relacionais Conhece modelo lógico e modelo físico Fornece uma série de facilidades nesta comunicação
6. História ADO.NET 2.0 – Datasets e cia. LINQ to SQL Projeto do time de C# EntityFramework Time de projeto voltado para tecnologias de acesso a dados. Em 29/10/2008, mensagem do time de produto sobre união dos times do L2S e EF. Dúvida sobre continuidade do L2S.
7. Cenário do EF Visual Studio “Quadrant” Entity Framework Data Services ADO.NET “M”/EDM SQL Azure SQL Server … SQL Server Modeling Services
8. Entity Framework 4Novidades Recursos Data Developer Center http://msdn.microsoft.com/en-us/data/aa937723.aspx
9. História Feedbacks sobre o EF 1.0: Famoso “vote of no confidence” Foco nos aspectos de dados das entidades degradam arquiteturas de entidade Entidades criadas não são POCO (derivam de EntityObject) Falta de persistance ignorance deixa o código mais difícil de escrever
10. História Feedbacks sobre o EF 1.0: Excesso de código para lidar com lazyloading Modelo único trás problemas excessivos em um projeto com diversos desenvolvedores e controle de fonte Não é possível criar o armazenamento físico a partir de um modelo conceitual.
11. Melhorias no EF4 Suporte a mais operadores LINQ Pluralize Podemos encontrar: Movies-Movy Geração de código baseada em T4 templates(text template transformation toolkit) Maior facilidade de customização para o desenvolvedor
12. Melhorias no EF4 Melhorias no código SQL gerado De se esperar uma evolução contínua Suporte a tipos complexos no designer http://msdn.microsoft.com/en-us/library/dd456820(VS.100).aspx Melhoria da ferramenta Modelbrowser Ex.: apagar objetos do storagemodel e pesquisar por entidades
13. Melhorias no EF4 Geração customizada de objetos (T4) POCOs(T4) Lazyloading Code Only Maior facilidade para trabalhar com N camadas.
14. Flight Mode EF 4 – Model First Criar o modelo de Classes Gerar banco de dados baseado neste modelo Utilizar o modelo gerado pelo EF 4.0 Live!
15. Flight Mode EF 4 – Database First Partir de um banco de dados Pluralização Live!
16. Flight Mode EF 4 – POCOs Classes simples e ao controle do desenvolvedor Não dependem/conhecem Frameworks Não herdem nem implementam interfaces específicas do EF 4.0 Conhecem domínio do software Live!
17. Flight Mode EF 4 – Lazy Loading Carregar somente a entidade pai sem agregações Carregar os “filhos” somente quando (e se) preciso Pode significar melhora de performance Facilmente habilitado e desabilitado Live!
18. Flight Mode EF 4 – Code Only Sem necessidade de manter um EDMX Trata-se apenas com as classes Configuração toda feita via código Pode tornar o entendimento das relações mais complexo Live!
19. Q & A ?! Recursos http://dataservicesbrasil.ning.com http://www.devgoias.net marcelo.paiva@devgoias.net
20. Cadastre aqui e concorra uma licença do EF Profiler Link’s uteis http://dataservicesbrasil.ning.com http://www.devgoias.net http://blogs.msdn.com/adonet/default.aspx http://blogs.msdn.com/astoriateam/default.aspx E-mail: marcelo.paiva@devgoias.net
[1 min.]Atualmente temos diversas tecnologias e isso pode gerar confusões, mas hoje vamos entender como funcionam melhor duas dessas tecnologias que estão recebendo grandes melhorias.ADO.Net continua com os recursos tradicionais, sem poucos avanços.Linq to SQL – continua mas sem receber muita atenção.*entendendo melhor....[PROXIMO]
[1 min.]
[2 min.]Pela história mais recente podemos ver a sequencia do surgimento dessas tecnologias:1º ADO.Net 2.0 (de 2005 pra cá)2º Linq to SQL (em decorrência do surgimento do Linq o time precisava lançar alguma coisa que fizesse acesso a dados)3º Entity Framework – surgindo com o SP1 do .net Framework 3.5 O mesmo aconteceu com o ADO.Net Data Services, mas que é focado no conceito de serviço de dadosEntão o time de Plataforma de dados anunciou a união dos time L2S e EF, no entanto gerou a dúvida de como ficaria, então o time mandou a mensagem: “estaremos dando suporte ao L2S enquanto vamos focar maior atenção do EF”
[1 min.]Temos atualmente se formando este cenário das tecnologias Microsoft, onde vemos aí o local que o EF se enquadra.
Então vamos para as novidades do Entity Framework 4.
[2 min.]Vamos contextualizar o que tivemos no lançamento do EF 1.0 para entender os lançamentos da versão 4.01 – Com o lançamento da primeria versão, em razão das prioridades adotadas pelo time de produto, alguns MVP’s e influenciadores da comunidade que já trabalhavam com ferramentas de ORM, assinaram um ‘voto de não confiança’ no EF.2 – Porque desse ‘voto’??? Foram elencados algumas funcionalidades que a comunidade considera de grande importância, dos quais vamos destacar alguns aqui.3 – Comentar sobre o foco na persistência prejudicando o POCO e Persistence Ignorance
[2 min.]Outro ponto de crítica é como lhe dá o uso do lazyloading no EF 1.0O modelo único também problemas com uso em equipes grandes, pois é difícil o gerenciamento do mapeamento.Todo mapeamento é feito na verdade em XML, daí é importante conhecer muito ele, e fazer customizações é possível mas é bastante trabalhoso.Mais um ponto tratado pelo time de produto na primeira versão foi pensando em que a maioria já tenha um modelo de dados criado então o que temos é uma mapenamento que pode ser gerado a partir do modelo, mas o pessoal reclamou que não temos o contrário.
[2 min] Vamos ver então agora algumas das melhorias que o time do produto destacou e está disponibilizando nessa próxima versão 4 (que na verdade é a 2.0)Suporte a mais operadores LINQAgora temos mais recursos como .single()PluralizaçãoClientes (tabela) – Cliente (entidade)Geração baseada em T4, inclusive agora tem um Add-in que cria um novo template para o VS2010 RC
[1 min] Era de se esperar melhorias no código SQL gerado.Evidentemente o time deve estar preocupado em gerar cada veis mais um resultado melhorSuporte a tipos mais complexosAgora temos suporte no design, o que antes tinhamos somente através do XMLO Design melhorou agora, permitindo apagar objetos, o que antes só era feito através o XML
[2 min]Podemos customizar o código gerado no mapeamentoPOCO’s agora temos suporte a customizado através de T4Lazyloading ObjectStateManager mais flexível podendo manipular mais facilmente o estado da entidade.
D:DevGoiasCommunityLaunch2010\_PalestradotNetDayFlight1\_StartdotNetDayFligthModelFirst- criar um novo modelo vazio (dotnetday)Post (id, Titulo, Texto) / Comentario (id, Email, Texto)- Executar script no banco 'dotNetDay'- depois criar o banco no SQL studio- Criar metodos para adicionar um Post e listar no grid dotNetDayIIContainer ctx = new dotNetDayIIContainer(); public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = ctx.PostSet.Select(a => a).ToList(); } private void Form1_Load(object sender, EventArgs e) { ctx.AddToPostSet(new Post { Titulo = "Evento dotnetDay", Texto = "demonstrando model first" }); ctx.SaveChanges(); }
1 - D:DevGoiasCommunityLaunch2010\_PalestradotNetDayFlight2\_StartdotNetDayDBFirst Criar edmxIndicar banco de dados 'dotnetday'Marcar 'pluralização'Criar métodos para inserir dados e também consulta dotNetDayEntities ctx = new dotNetDayEntities(); public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Categoria cat = new Categoria { Descricao = "Açougue" }; cat.Produtos.Add(new Produto { Ativo = true, Nome = "Picanha", Preco = 17 }); ctx.AddToCategorias(cat); ctx.SaveChanges(); } private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = ctx.Categorias.Select(c => c).ToList(); } - debug de inserir- Mostrar o IntelliTrace- Abrir EFProfiler- Mostrar querys
-Mostrar o edmx.Designer.cs (classes contextualizadas)-Apagar CustomTool nas propriedades do edmxEntityModelCodeGenerator -Adicionar no projeto um item 'POCO generator'-Indicar o arquivo edmx no .tt e Context.tt Código: dotNetDayEntities ctx = new dotNetDayEntities(); public Form1() { InitializeComponent(); } private void button2_Click(object sender, EventArgs e) { Categoria cat = new Categoria { Descricao = "Açougue" }; cat.Produtos.Add(new Produto { Ativo = true, Nome = "Picanha", Preco = 17 }); ctx.AddObject("Categorias", cat); ctx.SaveChanges(); } private void button1_Click(object sender, EventArgs e) { dataGridView1.DataSource = ctx.Categorias.Select(c => c).ToList(); } -Fazer testes de inserção e novamente
D:DevGoiasCommunityLaunch2010\_PalestradotNetDayFlight3ProntodotNetDayDBFirst (mesmo exemplo do exemplo 3) Adicionar botão para ler produtos da categoria 3 private void button3_Click(object sender, EventArgs e) { var cat3 = ctx.Categorias.Where(c => c.ID == 3).Select(c => c).First(); foreach (var item in cat3.Produtos) { MessageBox.Show(item.Nome); } } Desabilitar lazyloadingDemonstrar resultadoAlterar mostrando 'include'
D:DevGoiasCommunityLaunch2010\_PalestradotNetDayFlight4dotNetDayCodeOnly- Demonstrar as classes básicas- Demonstrar o mapeamento- Demonstrar a geração de script
Agora vamos para a parte II com as novidades do WCF Data Services