O documento apresenta as principais novidades do Entity Framework 4 e do WCF Data Services 1.5, incluindo melhorias no código gerado, suporte a POCOs, contagem de registros e suporte a projeções. Apresenta também demonstrações das funcionalidades dessas tecnologias.
1. Entity Framework 4“Restaurando a confiança”Novidades do WCF Data Services 1.5 Marcelo Paiva Softprime Soluçõesmarcelo@softprime.com.br @marcelo_paiva http://marcelosoftprime.spaces.live.com
2. Agenda Tecnologias de Acesso a dados Entity Framework 4 Novidades do EF 4 Demonstração ADO WCF Data Services 1.5 Novidades da versão 1.5 Demonstração Q & A
4. 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.
5. Parte I Entity Framework 4“Restaurando a confiança” Recursos Data Developer Center http://msdn.microsoft.com/en-us/data/aa937723.aspx
6. 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
7. 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.
8. 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
9. 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
10. Melhorias no EF4 Geração customizada de objetos (T4) POCOs(T4) Lazyloading Restrições do ObjectStateManager serão flexibilizadas. Maior facilidade para trabalhar com N camadas.
11. Flight Mode Visual Studio 2008 vs. Visual Studio 2010 Pluralization Gerar banco de dados Model-First Qual instrução SQL está sendo gerada?? POCO (plain-old CLR objets) Lazyloading
12. Parte II WCF Data ServicesNovidades da versão 1.5 Recursos Data Developer Center http://msdn.microsoft.com/en-us/data/aa937723.aspx
13. Qual o objetivo do WCF Data Services? Aplicações normalmente são excelentes geradoras de dados. Mas nem tanto para compartilhar dados É necessário ir além de simplesmente criar interfaces de importação/exportação Quebrar esse “amontoado” de dados sem violar integridade e segurança
14. Qual o objetivo do WCF Data Services? O WCF Data Services se encaixa perfeitamente nesse cenário Foca em fornecer uma abordagem com serviços (limites bem definidos) e previsível para troca de dados Consumidor Protocolo Produtor
15. Novidades do WCF Data Services v1.5 Contagem de registros RowCount Suporte a projeções Server Driven Paging Melhor suporte a tipo blob
16. Contagem de registros (Row count) /Products Sempaginação Perda de dados potencial n # of products /Products?$skip=10&$take=10 Semideia do total # de products 10 products
17. Contagem de registros (continuação) /Products/$count?$skip=10&$take=10 Sem dados Count /Products?$skip=10&$take=10&$inlinecount=allpages 10 products + Inline Count
19. Flight Mode II Contagem de registros RowCount Suporte a projeções Server Driven Paging
20. Q & A ?! Recursos http://dataservicesbrasil.ning.com http://www.devgoias.net marcelo.paiva@devgoias.net
21. Obrigado! 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
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]
Pela história mais recente podemosver 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”
Então vamos para a primeira parte que focaremos o Entity Framework 4.
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
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.
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
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
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\_PalestraFlight 1EF4Flight1 – Flight de Pluralização - Mostrar no VS 2008 - Mostrar no VS 2010D:DevGoiasCommunityLaunch2010\_PalestraFlight 2 EF4Flight2 – Flight de Model-First - criar um novo modelo vazio - depois criar o banco no SQL studio - Abrir EFProfiler - Mostrar querys D:DevGoiasCommunityLaunch2010\_PalestraFlight 3 EF4Flight3 – POCOD:DevGoiasCommunityLaunch2010\_PalestraFlight 3 EF4Flight3 4 - Lazyloading
Agora vamos para a parte II com as novidades do WCF Data Services
Normalmente temos em nossas aplicações muitos dados, mas quando falamos de integração e compartilhamento ela não atende muito bem aos diversos cenários.Temos comumente importação/exportação.Precisamos de algo que organize os dados e compartilhe sem violar integridade e segurança.
Seus problemas acabaram o WCF Data Services se encaixa perfeitamente nesse cenário. - trabalha automaticamente o compartilhamento das informações - é tendência a integração com demais produtos da MS - SharePoint - Azure - Office
Using ADO.NET Data Services today, you can make a request to a service for a specific entity set, such as “Products”. This provides a great level of flexibility to the consumer, but it comes with a few problems [Advance Animation]. Because there was no paging options applied to the request, the user has no idea just how much data they are about to get back. This could end up creating a network bottleneck [Advance Animation].The consumer can optionally specify paging parameters in their request for products, which removes the potential bandwidth tax [Advance Animation]. The problem with this approach is that you have no idea how many products actually exist on the server. If you wanted to provide some paging functionality in a client application, there isn’t any way to determine how many pages there are without retrieving all products.
In ADO.NET Data Services 1,5, there is a new pseudo-selector that can be applied to a request: $count. As this example shows, it isn’t a query option (like $skip or $take) but rather a value that you specifically target, much like the $value or $links pseudo-selectors [Advance Animation]. When you target an entity-sets $count, you get back only the count of items in that set. This is nice if you already have the data and are only concerned with determining the server-side count. But if you want data as well as the count, this approach doesn’t lend itself as well to that scenario [Advance Animation].In addition to the $count pseudo-selector, there is a new query option called $inlinecount that allows you to query for data and then optionally include the count inside the response [Advance Animation]. This option is great because now you can get the data you need, paged to the size you need, and also find out how many total items exist on the server, all in a single request. This makes it much easier to develop client applications that consume a data service.
By default, when ADO.NET Data Services exposes an instance of an entity type, it serializes the data using the Atom Publishing Protocol (Atom Pum/APP) format. Every public property on the entity type gets mapped to an element within the content of the respective entry element.While this default behavior works just fine for many situations, there are some oddities when using APP [Advance Animation]. For instance, the APP format requires that every entry include a title and an author. ADO.NET Data Services will render these elements, but never actually fill them with content. This could confuse consumers of the service that are APP aware and would expect to be provided with a title and/or author.In 1.5, ADO.NET Data Services introduces a feature called “friendly feeds” that allows you to map an entity property to an element within the APP entry. This can either be a pre-defined element such a title or author, or a custom element. The ability to map properties to custom elements allows you to add additional information to your data feeds, such as microformats (i.e. GeoRSS), that can be interpreted by understanding clients.