<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Waldemir Cambiucci - Solutions Architect - Microsoft Brasil : Entity Framework</title><link>http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx</link><description>Tags: Entity Framework</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Leitura Recomendada: artigos sobre Entity Framework</title><link>http://blogs.msdn.com/wcamb/archive/2009/09/03/leitura-recomendada-artigos-sobre-entity-framework.aspx</link><pubDate>Fri, 04 Sep 2009 02:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9891139</guid><dc:creator>wcamb</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9891139.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9891139</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9891139</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Depois de uma semana bem agitada com Tech-ed Brasil, palestras e até uma General Session para variar um pouco, esta semana tivemos algumas discussões com equipes de projetos em empresas grandes.&lt;/P&gt;
&lt;P&gt;Uma dessas reuniões tratou de aspectos de &lt;STRONG&gt;Entity Framework&lt;/STRONG&gt; e o uso de uma camada de persistência de dados em aplicações Web. &lt;/P&gt;
&lt;P&gt;Imagine um cenário de aplicação Web na intranet de uma empresa, com mais de 3000 usuários previstos, 350 usuários simultâneos, uma análise de 1500 pontos de função e um modelo de dados em torno de 450 tabelas. &lt;/P&gt;
&lt;P&gt;Esse cenário é até comum no mercado e podemos considerar o desenho abaixo uma bela simplificação, posicionando alguns componentes interessantes:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeiturarecomendadaartigossobreEntityFram_11D4E/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeiturarecomendadaartigossobreEntityFram_11D4E/image_2.png"&gt;&lt;IMG style="BORDER-BOTTOM: 0px; BORDER-LEFT: 0px; DISPLAY: inline; BORDER-TOP: 0px; BORDER-RIGHT: 0px" title=image border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeiturarecomendadaartigossobreEntityFram_11D4E/image_thumb.png" width=393 height=427 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LeiturarecomendadaartigossobreEntityFram_11D4E/image_thumb.png"&gt;&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Aqui, aproveitei um desenho da sessão do Condé (&lt;STRONG&gt;DAT301&lt;/STRONG&gt;) do último Tech-ed Brasil, valeu &lt;A href="http://blogs.msdn.com/conde/archive/2009/08/27/tech-ed-2009-links.aspx" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/conde/archive/2009/08/27/tech-ed-2009-links.aspx"&gt;Condé&lt;/A&gt;! :)&lt;/P&gt;
&lt;P&gt;Veja que já estou apondando algumas decisões para o projeto, como o uso de &lt;STRONG&gt;ASP.NET MVC&lt;/STRONG&gt; para a interface Web, &lt;STRONG&gt;serviços WCF&lt;/STRONG&gt; para as regras de negócio e uma camada de persistência com &lt;STRONG&gt;Entity Framework&lt;/STRONG&gt;, implementando vários EDMX, um para cada domínio de dados que participará da aplicação.&lt;/P&gt;
&lt;P&gt;Para fundamentar a camada de dados com Entity Framework, alguns artigos são interessantes pelos exemplos fornecidos, veja:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Criando um modelo de dados de entidade &lt;BR&gt;&lt;/STRONG&gt;By John Papa &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/cc163286.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/cc163286.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/cc163286.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Acesso a dados flexível com LINQ to SQL e Entity Framework &lt;BR&gt;&lt;/STRONG&gt;By Anthony Sneed &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/dd263098.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/dd263098.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/dd263098.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Obtenha uma modelagem de dados flexível com o Entity Framework &lt;BR&gt;&lt;/STRONG&gt;By Elisa Flasko &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/cc700331.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/cc700331.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/cc700331.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Expor e utilizar dados no mundo de serviços web &lt;BR&gt;&lt;/STRONG&gt;By Elisa Flasko e Mike Flasko &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/cc748663.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/cc748663.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/cc748663.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;N-Tier Application Patterns &lt;BR&gt;&lt;/STRONG&gt;By Daniel Simmons &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/ee321569.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/ee321569.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/ee321569.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;EF v2 and Data Access Architecture Best Practices &lt;BR&gt;&lt;/STRONG&gt;By Tim Mallalieu &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/ee236639.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/ee236639.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/ee236639.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Para esse projeto, ainda outros aspectos serão importantes, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;segurança de mensagens e de transporte&lt;/LI&gt;
&lt;LI&gt;validação de parâmetros e métodos dos serviços WCF&lt;/LI&gt;
&lt;LI&gt;caching de dados&lt;/LI&gt;
&lt;LI&gt;tratamento de exceção&lt;/LI&gt;
&lt;LI&gt;hosting de serviços WCF&lt;/LI&gt;
&lt;LI&gt;administração do ambiente em produção&lt;/LI&gt;
&lt;LI&gt;transferência de dados entre camadas, via &lt;A href="http://msdn.microsoft.com/pt-br/magazine/dd263098.aspx" rel=nofollow target=_blank mce_href="http://msdn.microsoft.com/pt-br/magazine/dd263098.aspx"&gt;DTO&lt;/A&gt; – Data Transfer Object, entre outros…&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Mas como eu gostaria de destacar apenas as questões de Entity Framework, fica aqui uma última dica de leitura, o blog do Danny Simmons, gerente de produto do Entity Framework, que tem mantido um excelente blog sobre EF.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Danny Simmons’s Blog&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/dsimmons/" rel=nofollow target=_blank mce_href="http://blogs.msdn.com/dsimmons/"&gt;http://blogs.msdn.com/dsimmons/&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Bastante coisa para ler, bons exemplos para testar!!! &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9891139" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Leitura+Recomendada/default.aspx">Leitura Recomendada</category></item><item><title>Construindo soluções com Entity Framework e arquitetura em múltiplas camadas.</title><link>http://blogs.msdn.com/wcamb/archive/2008/12/22/construindo-solu-es-com-entity-framework-e-arquitetura-em-m-ltiplas-camadas.aspx</link><pubDate>Mon, 22 Dec 2008 20:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:9247591</guid><dc:creator>wcamb</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/9247591.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=9247591</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=9247591</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Esse assunto tem sido recorrente desde julho, retornando em algumas discussões com&amp;nbsp;empresas de diversas áreas: Como organizar uma arquitetura de solução usando Entity Framework? Como representar as entidades de negócio, as interfaces de serviços e como passar esses dados entre as várias camadas de uma aplicação?&lt;/P&gt;
&lt;P&gt;Para começar, tenho recomendado olhar a parte IV do AppArchGuide 2.0, que anunciamos semana passada, aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;patterns &amp;amp; practices : Application Architecture Guide 2.0 &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/12/19/patterns-practices-application-architecture-guide-2-0.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Uma arquitetura de referência interessante é a organização de uma aplicação desktop (Rich Client Application), como vemos a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=443 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_thumb.png" width=492 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_thumb.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Note que na camada de negócios, temos os Business Workflows, Business Components e os Business Entities bem definidos. Nesse cenário, os BE's representam as abstrações de dados que obtemos a partir da camada de dados, via Entity Framework. &lt;/P&gt;
&lt;P&gt;Na sequência, um bom exemplo de implementação é dado no artigo do John Papa, que segue abaixo:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Entity Framework em arquiteturas de camadas&lt;/STRONG&gt; &lt;BR&gt;John Papa &lt;BR&gt;Ref.: &lt;A href="http://msdn.microsoft.com/pt-br/magazine/cc700340.aspx" mce_href="http://msdn.microsoft.com/pt-br/magazine/cc700340.aspx"&gt;http://msdn.microsoft.com/pt-br/magazine/cc700340.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;O artigo apresenta uma solução que oferece um bom começo para quem está pensando em projetos com o Entity Framework. A figura a seguir apresenta a organização básica da solução, onde vemos as interfaces em WCF para comunicação entre a camada de apresentação e a camada de negócio.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_4.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=459 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_thumb_1.png" width=503 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/ConstruindosoluescomEntityFrameworkLINQ_D3CE/image_thumb_1.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Finalmente, vale lembrar que o Otávio fez uma apresentação sobre o assunto durante o último Tech-Ed Brasil 2008, usando o mesmo artigo do John Papa para falar sobre múltiplos contextos e boas práticas. Veja alguns comentários dele aqui:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Semana de acontecimentos &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A title=http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx href="http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx" mce_href="http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx"&gt;http://blogs.msdn.com/otavio/archive/2008/10/19/semana-de-acontecimentos.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=9247591" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/patterns+_2600_amp_3B00_+practices/default.aspx">patterns &amp;amp; practices</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>ADO.NET Entity Framework : novos providers estão chegando.</title><link>http://blogs.msdn.com/wcamb/archive/2008/06/14/ado-net-entity-framework-novos-providers-est-o-chegando.aspx</link><pubDate>Sat, 14 Jun 2008 21:34:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8598090</guid><dc:creator>wcamb</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8598090.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8598090</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8598090</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;O último TechEd 2008 trouxe algumas novidades sobre o mundo &lt;STRONG&gt;ADO.NET Entity Framework&lt;/STRONG&gt; e &lt;STRONG&gt;LINQ&lt;/STRONG&gt;, vale conferir.&lt;/P&gt;
&lt;P&gt;Para quem está começando agora, Entity Framework oferece uma camada de mapeamento ORM - &lt;EM&gt;Object Relational Mapping&lt;/EM&gt;, resolvendo a impedância entre o mundo relacional (de dados e coleções) e o mundo orientado a objetos (de tipos e classes). Enquanto isso, o LINQ - &lt;EM&gt;Language Integrated Query&lt;/EM&gt; - oferece uma síntaxe de manipulação e acesso a coleções, permitindo uma navegação por dados de uma forma mais legível e aderente ao modelo orientado a objeto. &lt;/P&gt;
&lt;P&gt;Quando vemos um código acessando uma base de dados via &lt;STRONG&gt;LINQ to SQL&lt;/STRONG&gt;, por exemplo, temos algo assim:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=217 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_thumb_2.png" width=531 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_thumb_2.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A partir de um contexto de conexão, instanciamos uma classe de mapeamento da tabela &lt;EM&gt;People&lt;/EM&gt; (do banco de dados mapeado) e fazemos nossa consulta através de uma coleção, dada pelo objeto &lt;STRONG&gt;query&lt;/STRONG&gt;. Veja que o tipo utilizado é "&lt;STRONG&gt;var&lt;/STRONG&gt;", um tipo anônimo que permite esse tratamento de coleções no LINQ. &lt;/P&gt;
&lt;P&gt;Assim também, o mesmo acesso utilizando &lt;STRONG&gt;LINQ to Entity&lt;/STRONG&gt; sobre o ADO.NET Entity Framework ficaria assim:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_8.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=232 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_thumb_3.png" width=463 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQeADO.NETEntityFrameworkummodelode_11986/image_thumb_3.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;No exemplo acima, a instância da tabela &lt;EM&gt;People&lt;/EM&gt; é feita através do objeto &lt;EM&gt;ObjectQuery&lt;/EM&gt;, que acessa a pilha de mapeamento do Entity Framework. Só para lembrar, quando falamos em LINQ to SQL, estamos somente sobre SQL Server da Microsoft. Quando falamos em LINQ to Entity, estamos sobre qualquer banco mapeado pelo Entity Framework. &lt;/P&gt;
&lt;P&gt;A boa notícia, anunciada no último TechEd em Orlando, é que novos &lt;STRONG&gt;providers&lt;/STRONG&gt; para múltiplos bancos estão saindo do forno, uma demanda que muitas empresas têm feito para o uso do Entity Framework. Vejamos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;a &lt;STRONG&gt;Core Lab&lt;/STRONG&gt; foi a primeira empresa a oferecer um ADO.NET provider com suporte para o Entity Framework Beta 3, ainda com conectividade para o SQLite, Oracle, MySQL e PostgreSQL. Veja mais aqui: 
&lt;P&gt;Ref.: &lt;A title=http://crlab.com/news/2007/directs430.html href="http://crlab.com/news/2007/directs430.html" mce_href="http://crlab.com/news/2007/directs430.html"&gt;http://crlab.com/news/2007/directs430.html&lt;/A&gt; &lt;BR&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;a &lt;STRONG&gt;IBM&lt;/STRONG&gt; anunciou recentemente seus providers para Entity Framework, permitindo a conectividade com DB2, IDS e U2, trabalhando também com o DB2 Express-C 9.5. Veja mais aqui: 
&lt;P&gt;Ref.: &lt;A href="http://www-128.ibm.com/developerworks/forums/thread.jspa?threadID=203893" mce_href="http://www-128.ibm.com/developerworks/forums/thread.jspa?threadID=203893"&gt;http://www-128.ibm.com/developerworks/forums/thread.jspa?threadID=203893&lt;/A&gt;&lt;BR&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;a &lt;STRONG&gt;Npgsql&lt;/STRONG&gt; já oferece o beta 4 de seu provider .NET Data Provider para bancos de dados Postgresql, confira: 
&lt;P&gt;Ref.: &lt;A href="http://pgfoundry.org/forum/forum.php?forum_id=1307" mce_href="http://pgfoundry.org/forum/forum.php?forum_id=1307"&gt;http://pgfoundry.org/forum/forum.php?forum_id=1307&lt;/A&gt;&lt;/P&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;Reggie Burnett&lt;/STRONG&gt;, o lead developer do provider para &lt;STRONG&gt;MySQL&lt;/STRONG&gt;, o MySQL ADO.NET provider, anunciou que em breve, a versão 5.3 do produto irá suportar a tecnologia Entity Framework.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;
&lt;LI&gt;Finalmente, a &lt;STRONG&gt;DataDirect&lt;/STRONG&gt; anunciou que irá disponibilizar já em Q3 de 2008, um novo release de seu &lt;STRONG&gt;Oracle ADO.NET provider&lt;/STRONG&gt;, suportando o Entity Framework para acesso aos bancos de dados Oracle.&lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;Ainda para o mundo &lt;STRONG&gt;Oracle&lt;/STRONG&gt; vale um destaque: diversas empresas estão atualizando seus &lt;EM&gt;providers&lt;/EM&gt;&amp;nbsp; para o suporte ao Entity Framework e acesso aos bancos de dados Oracle. É o caso da &lt;STRONG&gt;Core Lab&lt;/STRONG&gt;, da &lt;STRONG&gt;OpenLink&lt;/STRONG&gt; &lt;STRONG&gt;Software&lt;/STRONG&gt; e agora a &lt;STRONG&gt;DataDirect&lt;/STRONG&gt; &lt;STRONG&gt;Technologies&lt;/STRONG&gt;.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Com o lançamento desses &lt;EM&gt;providers&lt;/EM&gt;, será possível implementar estruturas de navegação LINQ com qualquer tipo de banco de dados, ampliando a flexibilidade de acesso de nossas soluções. Um sonho se tornando realidade!&lt;/P&gt;
&lt;P mce_keep="true"&gt;Por enquanto é só! Até o próximo post :) &lt;/P&gt;
&lt;P mce_keep="true"&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8598090" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>Entity Framework FAQ : atualizado e com novas questões.</title><link>http://blogs.msdn.com/wcamb/archive/2008/05/16/entity-framework-faq-atualizado-e-com-novas-quest-es.aspx</link><pubDate>Sat, 17 May 2008 01:05:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8515341</guid><dc:creator>wcamb</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8515341.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8515341</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8515341</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Para quem anda acompanhando a evolução do &lt;STRONG&gt;Entity Framework, &lt;/STRONG&gt;componente importante da próxima versão do &lt;STRONG&gt;ADO.NET&lt;/STRONG&gt;, o FAQ de &lt;I&gt;Danny Simmons&lt;/I&gt;&amp;nbsp; foi atualizado esta semana e está mais rico do que nunca... :)&lt;/P&gt;
&lt;P&gt;&lt;B&gt;Entity Framework FAQ &lt;BR&gt;&lt;/B&gt;Version 0.4 – 5/13/2008 &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/dsimmons/pages/entity-framework-faq.aspx" mce_href="http://blogs.msdn.com/dsimmons/pages/entity-framework-faq.aspx"&gt;http://blogs.msdn.com/dsimmons/pages/entity-framework-faq.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Aqui no blog, já tivemos alguns posts falando sobre camadas de persistência, LINQ e EF. Veja:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Revisitando a Persistência - LINQ, Entity Framework, Object-relational mapping, entre outros. &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/03/20/revisitando-a-persist-ncia-linq-entity-framework-ado-entity-framework-entre-outros.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2008/03/20/revisitando-a-persist-ncia-linq-entity-framework-ado-entity-framework-entre-outros.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/03/20/revisitando-a-persist-ncia-linq-entity-framework-ado-entity-framework-entre-outros.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Revisitando a Persistência - ORM, ADO.NET Entity Framework, Data Services, Sync, LINQ e ainda outros comentários. &lt;BR&gt;&lt;/STRONG&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/03/26/revisitando-a-persist-ncia-orm-ado-net-entity-framework-data-services-sync-linq-e-ainda-outros-coment-rios.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2008/03/26/revisitando-a-persist-ncia-orm-ado-net-entity-framework-data-services-sync-linq-e-ainda-outros-coment-rios.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/03/26/revisitando-a-persist-ncia-orm-ado-net-entity-framework-data-services-sync-linq-e-ainda-outros-coment-rios.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Estou preparando um novo material para avançar no assunto e em breve compartilho com vocês algumas soluções. Aguardem...&lt;/P&gt;
&lt;P&gt;E não deixem de visitar também a página do projeto EF no &lt;EM&gt;CodePlex&lt;/EM&gt;, veja:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Entity Framework Contrib project &lt;/STRONG&gt;&lt;BR&gt;Ref.: &lt;A href="http://www.codeplex.com/efcontrib" mce_href="http://www.codeplex.com/efcontrib"&gt;http://www.codeplex.com/efcontrib&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8515341" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>Do Windows DNA para o mundo orientado a serviços : uma proposta para estudo.</title><link>http://blogs.msdn.com/wcamb/archive/2008/04/18/do-windows-dna-para-o-mundo-orientado-a-servi-os-alguns-exemplos-de-evolu-o.aspx</link><pubDate>Fri, 18 Apr 2008 14:17:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8407543</guid><dc:creator>wcamb</dc:creator><slash:comments>7</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8407543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8407543</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8407543</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;No último post, começamos nosso papo sobre evolução de uma arquitetura &lt;STRONG&gt;WinDNA&lt;/STRONG&gt; para uma plataforma mais atual. Vimos que antes de tudo, precisamos ter uma visão clara sobre os cenários envolvidos, assim como conhecer as novas tecnologias oferecidas pelo mercado. Nesse aspecto, novos frameworks estão disponíveis na plataforma Microsoft e cabe a nós, arquitetos, conhecê-los e exercitá-los, afim de melhor decidir sobre cada alternativa de evolução para nossas aplicações.&lt;/P&gt;
&lt;P&gt;Considerando a disposição de componentes na plataforma &lt;STRONG&gt;WinDNA&lt;/STRONG&gt;, podemos estudar uma alternativa de solução, conforme a figura a seguir:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_8.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_8.png"&gt;&lt;IMG style="BORDER-RIGHT: 0px; BORDER-TOP: 0px; BORDER-LEFT: 0px; BORDER-BOTTOM: 0px" height=495 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_thumb_3.png" width=491 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/DoWindowsDNAparaomundoorientadoaservios_10BB6/image_thumb_3.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de apresentação :&lt;/STRONG&gt; ASP.NET com Microsoft AJAX versão 1.0 e Silverlight 2.0.&lt;/P&gt;
&lt;P&gt;Para uma aplicação tipicamente Web, a construção de uma interface rica (&lt;EM&gt;RIA - Rich Internet Application&lt;/EM&gt;), que traga as funcionalidades e recursos da Web 2.0 é recomendável. E sobre recursos pensamos não somente em &lt;EM&gt;wikis, fóruns, webparts, controles gráficos, streaming&lt;/EM&gt;, etc, mas também em novas abordagens de apresentação e &lt;EM&gt;UX - User Experience&lt;/EM&gt;. Pensando ainda na composição de serviços e workflows, conceitos de &lt;STRONG&gt;aplicações compostas&lt;/STRONG&gt; ou &lt;EM&gt;mashups&lt;/EM&gt; também é uma capacidade que deve ser avaliada para nossa arquitetura.&lt;/P&gt;
&lt;P&gt;Nesse ponto, a infra-estrutura &lt;STRONG&gt;ASP.NET com AJAX e Silverlight 2.0&lt;/STRONG&gt; oferece essa gama de recursos para a construção de interfaces poderosas em .NET. Claro, devemos avaliar qual a aderência de nossa aplicação para todas essas inovações. Mas os novos recursos de administração do IIS 7.0 devem ser avaliados, independente do grau de ousadia de nossa nova interface. O IIS 7.0 seria nossa infra-estrutura de suporte às páginas e requisições HTTP/HTTPS, etc. sobre o Windows Server 2008.&lt;/P&gt;
&lt;P&gt;Para saber mais sobre o IIS 7.0 e esses recursos, não deixe de ver a série especial sobre o produto no blog do &lt;A href="http://blogs.technet.com/dbordini/" target=_blank mce_href="http://blogs.technet.com/dbordini/"&gt;Danilo Bordini&lt;/A&gt;, onde temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 7: Delegação&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 6: Configuração&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 5: Extensibilidade&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 4: Segurança&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 3: Pilares&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;IIS 7.0 (Internet Information Services): Parte 2: Evolução da Plataforma&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Série Especial - IIS 7.0 (Internet Information Services)&lt;/FONT&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx href="http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx" mce_href="http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx"&gt;http://blogs.technet.com/dbordini/archive/tags/Internet+Information+Services+_2800_IIS_2900_/default.aspx&lt;/A&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;e para saber mais sobre o Silverlight 2.0 e o AJAX 1.0, veja os links:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://silverlight.net/ href="http://silverlight.net/" mce_href="http://silverlight.net/"&gt;http://silverlight.net/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://www.asp.net/ajax/ href="http://www.asp.net/ajax/" mce_href="http://www.asp.net/ajax/"&gt;http://www.asp.net/ajax/&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;E sempre é bom acompanhar como está a evolução do modelo &lt;STRONG&gt;ASP.NET MVC Framework&lt;/STRONG&gt;, ainda em Preview 2 (&lt;EM&gt;Model-View-Controller&lt;/EM&gt;). Veja aqui:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de colaboração de processos :&lt;/STRONG&gt; Windows Workflow Foundation (.NET 3.5)&lt;/P&gt;
&lt;P&gt;Em alguns cenários, podemos pensar na implementação de processos de negócio através de fluxos de controle ou mesmo máquinas de estado. Quando falamos em fluxos de controle (ou workflows), pensamos num cenário onde a execução de atividades é sequencial, a partir de eventos que são tratados numa ordem esperada. Temos uma atividade inicial e uma atividade final bem definida. Quando falamos em máquinas de estado, a execução das atividades é orientada por eventos, que podem ocorrer numa ordem aleatória. Assim, nosso desenvolvimento é baseado no estado corrente, com transições por eventos, sendo mais flexível para mudanças externas.&lt;/P&gt;
&lt;P&gt;A implementação de um processo de negócio através de um workflow ou máquina de estados pode ser feita através do &lt;STRONG&gt;WF - Windows Workflow Foundation&lt;/STRONG&gt;. Como vimos em posts anteriores, podemos ainda integrar esses processos com serviços do WCF - Windows Communication Foundation, ou ainda outros processos de negócio. &lt;/P&gt;
&lt;P&gt;Finalmente, lembre-se que um processo pode ter interação humana para aprovações ou submissões, o que pode caracterizar execuções de longa duração. A interação de serviços ou outras camadas com esse tipo de processo precisa ser bem pensada e sinalizada para toda a arquitetura. &lt;/P&gt;
&lt;P&gt;Algumas perguntas: Quais são os processo de longa duração e de curta duração presentes em nossa arquitetura? Podemos implementar parte da lógica e regras de negócio em processos com WF? &lt;/P&gt;
&lt;P&gt;Para saber mais sobre WF e processos, veja:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx href="http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx" mce_href="http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx"&gt;http://msdn2.microsoft.com/en-us/netframework/aa663322.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de serviços e negócicos :&lt;/STRONG&gt; Windows Communication Foundation e serviços hosteados no WAS - Windows Process Activation Service&lt;/P&gt;
&lt;P&gt;Surge então a discussão sobre a camada de serviços. O que é mesmo um serviço? :)&lt;/P&gt;
&lt;P&gt;Podemos pensar na implementação de classes de negócio, com suas &lt;EM&gt;business entities&lt;/EM&gt; e &lt;EM&gt;business process&lt;/EM&gt;, utilizando a infra-estrutura do WCF para sua exportação e publicação de interfaces. Quando surge o WCF em nossa arquitetura, precisamos discutir alguns pontos importantes:&lt;/P&gt;
&lt;P&gt;Qual será o template de serviço que usaremos? Nesse template, precisamos considerar o tratamento de exceção, a propagação de mensagens de erro, exportação de contadores de performance, e também aspectos de comportamento do serviço, contrato de dados, suporte transacional, mensagens tratadas, etc.&lt;/P&gt;
&lt;P&gt;Qual será o transporte tratado pelo serviço? A definição do &lt;STRONG&gt;binding&lt;/STRONG&gt; (para nosso &lt;STRONG&gt;endpoint&lt;/STRONG&gt;) é tão importante quanto a definição do próprio serviço. Através do binding correto, garantimos a melhor performance para a interação entre camadas, processos e serviços.&lt;/P&gt;
&lt;P&gt;Qual será o host para execução de serviços? Aqui, surge o WAS, já comentado em posts anteriores. Veja: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Windows Process Activation Service (WAS) - Um mecanismo de ativação de processos e serviços.&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx"&gt;http://blogs.msdn.com/wcamb/archive/2008/04/10/windows-process-activation-service-was-um-mecanismo-de-ativa-o-de-processos-e-servi-os.aspx&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;A importância da definição do host está associada ao processo de execução, mas também de administração, governança, distribuição e monitoração dos serviços em nossa arquitetura. Sem dúvida, cuidado muito especial é exigido.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de negócio e aplicações LOB :&lt;/STRONG&gt; COM+ 1.5 e MSDTC&lt;/P&gt;
&lt;P&gt;Um ponto importante nessa arquitetura para estudo é que ainda podemos conviver com componente publicados no COM+, isto é, componentes COM que estão hosteados no &lt;STRONG&gt;Component Services&lt;/STRONG&gt;&amp;nbsp; (veja comexp.msc) e ainda aproveitam o &lt;STRONG&gt;MSDTC - Distributed Transaction Coordinator&lt;/STRONG&gt; para o suporte transacional. Esses componente podem e devem permanecer em nossa arquitetura. Isso significa que é possível conviver com esse legado, seja através de camadas de interoperabilidade (&lt;EM&gt;interop&lt;/EM&gt; .NET) ou simplemente consumindo esses componentes através de &lt;EM&gt;Web Services&lt;/EM&gt;. Para alguns casos, teremos traduções entre ambiente gerenciado .NET e não-gerenciado, o que deve causar um certo &lt;EM&gt;delay&lt;/EM&gt;, que deve ser avaliado.&lt;/P&gt;
&lt;P&gt;A questão sempre será sobre a viabilidade (de custo, recursos e tempo) para a migração desses componentes (COM+ WinDNA) para .NET. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Camada de acesso a dados e LOB :&lt;/STRONG&gt; bancos de dados legado e aplicações LOB&lt;/P&gt;
&lt;P&gt;E para o acesso aos dados temos algumas alternativas, como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ADO.NET 2.0&lt;/STRONG&gt;, quando usamos o .NET 2.0 e seus recursos como Dataset, DataReader, Datatable, DataAdapter, DbConnection, DbCommand, etc.;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;LINQ TO SQL&lt;/STRONG&gt;, quando usamos .NET 3.5 e estamos falando com servidores da família SQL Server;&lt;/LI&gt;
&lt;LI&gt;&lt;STRONG&gt;LINQ TO ENTITY&lt;/STRONG&gt;, quando usamos ADO.NET Entity Framework (ainda em Beta 3), para falar com outros servidores de bancos de dados, através do providers oferecidos no mercado.&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Já falamos sobre LINQ e Entity Framework em alguns posts anteriores, veja aqui:&lt;/P&gt;
&lt;P&gt;Ref.: &lt;A title=http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx href="http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx" mce_href="http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx"&gt;http://blogs.msdn.com/wcamb/archive/tags/LINQ/default.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;A decisão entre as tecnologias de acesso a dados e camadas de persistência acima vai depender da orientação do projeto, entre a especialização para um middleware de alto desempenho, focado num único banco, ou um middleware de abstração e mapeamento, que permitirá trocas futuras de bancos de dados sem impacto na aplicação, porém, com um custo de mapeamento de traduções que deve ser avaliado quanto a performance.&lt;/P&gt;
&lt;P&gt;Mais uma vez, é importante lembrar que &lt;STRONG&gt;cada caso é um caso, sempre!&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;A estrutura em camadas acima foi colocada apenas como pretexto para a discussão dos frameworks e tecnologias disponíveis. Caberá a cada equipe de arquitetura avaliar internamente a aderência às suas próprias aplicações.&lt;/P&gt;
&lt;P&gt;Porém, tenha em mente que sua nova plataforma precisa estar antenada com as tendências de colaboração e integração de &lt;STRONG&gt;Software + Serviços&lt;/STRONG&gt; que temos observado. &lt;/P&gt;
&lt;P&gt;&lt;FONT color=#ff0000&gt;Construir preparado para a mudança, já que tudo se move, tudo flui, é uma prática cada vez mais desejada, já dizia Heráclito de Éfeso, uns 500 a.C. :) &lt;/FONT&gt;&lt;FONT color=#ff0000&gt;&lt;EM&gt;Panta hrei!&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8407543" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Arquitetura+de+Solu_26002300_231_3B0026002300_245_3B00_es/default.aspx">Arquitetura de Solu&amp;#231;&amp;#245;es</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/SOA/default.aspx">SOA</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WF/default.aspx">WF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WCF/default.aspx">WCF</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category><category domain="http://blogs.msdn.com/wcamb/archive/tags/WinDNA/default.aspx">WinDNA</category></item><item><title>Revisitando a Persistência - ORM, ADO.NET Entity Framework, Data Services, Sync, LINQ e ainda outros comentários.</title><link>http://blogs.msdn.com/wcamb/archive/2008/03/26/revisitando-a-persist-ncia-orm-ado-net-entity-framework-data-services-sync-linq-e-ainda-outros-coment-rios.aspx</link><pubDate>Thu, 27 Mar 2008 02:25:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8338499</guid><dc:creator>wcamb</dc:creator><slash:comments>16</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8338499.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8338499</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8338499</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;No último post, começamos uma discussão interessante sobre persistência. Vamos rever alguns pontos e avançar mais um pouquinho. A motivação do estudo é uma só: &lt;FONT color=#ff0000&gt;&lt;EM&gt;como e por que integrar a modelagem e programação Orientada a Objetos com Bancos de Dados Relacional?&lt;/EM&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;De fato, a maior parte de nossas aplicações usam um banco relacional para armazenamento de dados. Como vimos, essa tecnologia é vigente no mercado, por sua maturidade, fundamentação em uma teoria matemática forte (baseada em conjuntos) e padronização. Veja que, quando usamos o modelo relacional, o objetivo é a &lt;STRONG&gt;normalização&lt;/STRONG&gt; e a &lt;STRONG&gt;otimização&lt;/STRONG&gt; de recursos no armazenamento de nossos dados ou coleções;&lt;/P&gt;
&lt;P&gt;Da mesma forma, a maior parte de nossas aplicações usam linguagens de programação orientada a objetos em seu desenvolvimento. Com isso, nosso objetivo é a modelagem de &lt;STRONG&gt;processos&lt;/STRONG&gt;, como a definição de comportamentos e tipos de entidades na forma de classes;&lt;/P&gt;
&lt;P&gt;Surge assim um problema chamado&lt;STRONG&gt; "Impedance Mismatch"&lt;/STRONG&gt;, que é a dificuldade em realizar o mapeamento entre os dois mundos, o &lt;STRONG&gt;mundo relacional&lt;/STRONG&gt; e o &lt;STRONG&gt;mundo OO&lt;/STRONG&gt;.&lt;/P&gt;
&lt;P&gt;Para esse problema, uma solução é o uso de uma camada de tradução ou &lt;STRONG&gt;ORM - Object Relational Mapping&lt;/STRONG&gt;, que é responsável por esse mapeamento entre o mundo OO e o mundo relacional. Pense que o grande desejo é que essa camada de mapeamento ORM seja transparente para nossas aplicações.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/RevisitandoaPersistnciaORMADO.NETEntity_A823/image_2.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/RevisitandoaPersistnciaORMADO.NETEntity_A823/image_2.png"&gt;&lt;IMG style="BORDER-RIGHT-WIDTH: 0px; BORDER-TOP-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px" border=0 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/RevisitandoaPersistnciaORMADO.NETEntity_A823/image_thumb.png" width=375 height=222 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/RevisitandoaPersistnciaORMADO.NETEntity_A823/image_thumb.png"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;Existe uma série de ferramentas no mercado que oferecem soluções implementando camadas ORM e seus recursos. Veja que a técnica de mapeamento objeto-relacional ainda precisa resolver alguns problemas de mapeamento e representação de dados entre ambos os mundos, problemas como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Mapeamento entre Entidade e Classe (queries X tipos)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Herança&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Tratamento de Chaves (primárias, extrangeiras)&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Representação de Relacionamentos&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Campos Calculados&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Diferenças entre tipos SQL e linguagens de programação&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Locking e Isolation Level&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Tunning&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Caching, entre outros.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;De fato, existe um impacto em banco de dados durante a implementação desses modelos ORM. Para a implementação de herança, por exemplo, temos técnicas de mapeamento horizontal, mapeamento vertical, mapeamento filtrado, que implementam abordagens diferentes para a representação da herança entre classes, através de 1 ou mais tabelas em banco.&lt;/P&gt;
&lt;P&gt;No final, a própria decisão pelo uso de uma camada de mapeamento objeto-relacional deve ser ponderada em função de um conjunto de critérios (pessoais), como:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Desempenho final exigido (SLA envolvido na solução);&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Frequência de Leitura x Escrita x Atualização;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Flexibilidade e Custo de Manutenção;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Desempenho e Redundância x Custo de Manutenção e Formas Normais;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Consumo de Espaço x Desempenho;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Tempo de Processamento de Consultas;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Estilo da Aplicação;&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;Integração com sistemas legados, etc.&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Atualmente, temos uma série de novos frameworks disponíveis para o tratamento de acesso a dados, assim como para a construção de consultas integradas ao modelo orientado a objetos. É o caso do próprio ADO.NET Entity Framework e do LINQ, como citamos anteriormente. Porém, já existem muito outros componentes disponíveis, que você precisa conhecer. Para ajudar um pouco nesse roadmap, segue um conjunto de links interessante:&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ADO.NET 2.0&lt;/STRONG&gt; &lt;BR&gt;Nosso ADO.NET clássico, onde encontramos as estruturas &lt;EM&gt;Dataset, DataReader, Datatable, DataAdapter, DbConnection, DbCommand&lt;/EM&gt;, etc. &lt;BR&gt;Ref.: &lt;A title=http://msdn2.microsoft.com/en-us/data/aa937722.aspx href="http://msdn2.microsoft.com/en-us/data/aa937722.aspx" mce_href="http://msdn2.microsoft.com/en-us/data/aa937722.aspx"&gt;http://msdn2.microsoft.com/en-us/data/aa937722.aspx&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ADO.NET 3.5 &lt;/STRONG&gt;&lt;BR&gt;Disponível com o .NET Framework 3.5, onde encontramos as versões de LINQ to Objects, LINQ to DataSets, LINQ to SQL, LINQ to XML, enfim, as implementações de &lt;STRONG&gt;LINQ - Language Integrated Quey&lt;/STRONG&gt;, que permite a construção de consultas integradas ao modelo OO, para o acesso aos dados no mundo relacional ou ainda qualquer outra fonte de dados, como arquivos XML, estruturas customizadas, etc. Em linhas gerais, LINQ implementa um conjunto de mecanismos e bibliotecas para consultas de dados em memória, através de coleções. &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=333325fd-ae52-4e35-b531-508d977d32a6&amp;amp;DisplayLang=en&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;ADO.NET vNext &lt;BR&gt;&lt;/STRONG&gt;A próxima versão do ADO.NET deve encapsular um conjunto de novas ferramentas, que já estão sendo disponibilizadas em CTP e Previews para nossa discussão e alegria. Os principais componentes que já temos são:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ADO.NET Entity Framework Beta 3 &lt;BR&gt;&lt;/STRONG&gt;Responsável pelo mapeamento objeto-relacional, através do chamado &lt;STRONG&gt;EDM - Entity Data Model&lt;/STRONG&gt;. Esse modelo permite o mapeamento de classe objeto em qualquer tipo de fonte de dados (não só o modelo relacional) através de um processo de tradução implementado em 3 camadas: camada conceitual, camada lógica e camada de mapeamento. A documentação que acompanha o pacote está muito boa, vale conferir. &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ADO.NET Data Services (codenome “Astoria”) =&amp;gt; download do ASP.NET 3.5 Extensions Preview, onde temos o ASP.NET 3.5 + ADO.NET Data Services. &lt;BR&gt;&lt;/STRONG&gt;Permiti a publicação e navegação das informações de um banco de dados de forma online. &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=A9C6BC06-B894-4B11-8300-35BD2F8FC908&amp;amp;displaylang=en&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;Um exemplo muito interessante de navegação via Data Services você encontra aqui.Veja que nosso velho Northwind agora pode ser navegado diretamente através de &lt;EM&gt;querystrings&lt;/EM&gt;, praticamente. As aplicações são inúmeras, como integrações para aplicações AJAX, consumo via WCF, aplicações Web convencionais, etc. &lt;BR&gt;&lt;STRONG&gt;Northwind - Navegando dados online via ADO.NET Data Services&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://astoria.mslivelabs.com/OnlineServiceNorthwind.aspx" mce_href="http://astoria.mslivelabs.com/OnlineServiceNorthwind.aspx"&gt;http://astoria.mslivelabs.com/OnlineServiceNorthwind.aspx&lt;/A&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;ADO.NET Sync Services v1.0 &lt;BR&gt;&lt;/STRONG&gt;Sync Services é uma primeira parte de um framework ainda em desenvolvimento, que deve atender as aplicações que ficam parcialmente conectadas, ou seja, que demandam o uso de um cache local em tempos de desconexão, com a necessidade de uma sincronização de dados posterior com o servidor. Esses mecanismos e estruturas de persistências temporárias são o objetivo do Sync Services. &lt;BR&gt;&lt;BR&gt;Recomendo assistir um vídeo do &lt;EM&gt;channel9&lt;/EM&gt;, nesse link: &lt;BR&gt;Ref.: &lt;A title=http://channel9.msdn.com/Showpost.aspx?postid=384948 href="http://channel9.msdn.com/Showpost.aspx?postid=384948" mce_href="http://channel9.msdn.com/Showpost.aspx?postid=384948"&gt;http://channel9.msdn.com/Showpost.aspx?postid=384948&lt;/A&gt;&amp;nbsp; &lt;BR&gt;&lt;BR&gt;Para saber ainda mais, acompanhe as discussões aqui: &lt;BR&gt;Ref.: &lt;A href="http://www.danielmoth.com/Blog/2008/02/adonet-sync-services.html" mce_href="http://www.danielmoth.com/Blog/2008/02/adonet-sync-services.html"&gt;http://www.danielmoth.com/Blog/2008/02/adonet-sync-services.html&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=75FEF59F-1B5E-49BC-A21A-9EF4F34DE6FC&amp;amp;displaylang=en&lt;/A&gt; (sync for devices) &lt;BR&gt;Ref.: &lt;A title=http://www.microsoft.com/downloads/details.aspx?&amp;amp;FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;amp;DisplayLang=en href="http://www.microsoft.com/downloads/details.aspx?&amp;amp;FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;amp;DisplayLang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?&amp;amp;FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;amp;DisplayLang=en"&gt;http://www.microsoft.com/downloads/details.aspx?&amp;amp;FamilyID=7849b34f-67ab-481f-a5a5-4990597b0297&amp;amp;DisplayLang=en&lt;/A&gt; (sync for desktop)&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Finalmente, outros projetos que estão também no forno são o &lt;STRONG&gt;Microsoft ASP.NET MVC Framework&lt;/STRONG&gt; e o &lt;STRONG&gt;SubSonic&lt;/STRONG&gt;. &lt;BR&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;O &lt;STRONG&gt;Microsoft ASP.NET MVC Framework&lt;/STRONG&gt; habilita o desenvolvimento de aplicações Web no modelo &lt;STRONG&gt;MVC - Model View Controller&lt;/STRONG&gt;. Nesse modelo, a lógica da página fica na porção CONTROLLER, os objetos de HTML ficam no módulo VIEW e a lógica da aplicação fica na porção MODEL. Não está muito relacionado com o acesso a dados, mas colabora! :)&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;&lt;STRONG&gt;ASP.NET MVC Preview 2&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyID=38CC4CF1-773A-47E1-8125-BA3369BF54A3&amp;amp;displaylang=en&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;UL&gt;
&lt;LI&gt;O &lt;STRONG&gt;SubSonic Project&lt;/STRONG&gt;, conduzido por Rob Conery, é um conjunto de ferramentas que deve gerar de forma completa a camada de acesso a dados. Ao contrário do modelo ORM, onde temos o mapeamento do mundo OO no mundo relacional, SubSonic será um gerador de código ou do modelo de classes OO, a partir do &lt;EM&gt;schema&lt;/EM&gt; do banco relacional. Bonito! :)&lt;/LI&gt;&lt;/UL&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Para saber mais, acompanhe as discussões no Codeplex, aqui: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SubSonic Codeplex&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.codeplex.com/subsonic" mce_href="http://www.codeplex.com/subsonic"&gt;http://www.codeplex.com/subsonic&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;SubSonic: 2.1 Beta 2 Available Now&lt;/STRONG&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5636" mce_href="http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5636"&gt;http://www.codeplex.com/subsonic/Release/ProjectReleases.aspx?ReleaseId=5636&lt;/A&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;Enfim, Vida Longa ao Blog!!! &lt;BR&gt;Acho que não vai faltar assunto para os próximos meses, não acham?&lt;/P&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post e boa leitura a todos... :)&lt;/P&gt;
&lt;P&gt;Waldemir.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8338499" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item><item><title>Revisitando a Persistência - LINQ, Entity Framework, Object-relational mapping, entre outros.</title><link>http://blogs.msdn.com/wcamb/archive/2008/03/20/revisitando-a-persist-ncia-linq-entity-framework-ado-entity-framework-entre-outros.aspx</link><pubDate>Thu, 20 Mar 2008 22:40:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8327768</guid><dc:creator>wcamb</dc:creator><slash:comments>12</slash:comments><comments>http://blogs.msdn.com/wcamb/comments/8327768.aspx</comments><wfw:commentRss>http://blogs.msdn.com/wcamb/commentrss.aspx?PostID=8327768</wfw:commentRss><wfw:comment>http://blogs.msdn.com/wcamb/rsscomments.aspx?PostID=8327768</wfw:comment><description>&lt;P&gt;Olá pessoal, tudo certo?&lt;/P&gt;
&lt;P&gt;Falar de LINQ e persistência de dados é mesmo desafiador? Estive navegando pela Web e existem diversos blogs, artigos, whitepapers, pdf's, ppt's, wikis e exemplos que realmente deixam o leitor confuso. E algumas perguntas ainda aparecem no meio da discussão, como: "usando LINQ, onde é melhor colocar minha lógica de negócio, em banco de dados ou em componentes extra banco?" ou ainda "para toda arquitetura devo utilizar um modelo de persistência e mapeamento relacional?" e outras como "Qual a diferença entre LINQ, XPO, SubSonic, Ibatis, Nhibernate ou algo doméstico?".&lt;/P&gt;
&lt;P&gt;Bom, este post não pretende esgotar o assunto, mas colocar uma rápida visão sobre o tema, com um foco sobre o &lt;STRONG&gt;ADO.NET Entity Framework&lt;/STRONG&gt; e seus componentes. Para começar, vamos rever algumas definições.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Revisitando a persistência&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Quando falamos em &lt;STRONG&gt;persistência de dados&lt;/STRONG&gt; pensamos no armazenamento "eterno" dos dados, ou seja, enquanto o dispositivo físico de armazenamento dure. Quando se grava um arquivo no disco, por exemplo, o dado está sendo "eternizado" ou "persistido", deixando de ser volátil na memória RAM e passando a ser escrito num dispositivo que armazena a informação de modo que ela não desapareça facilmente.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;Assim, podemos dizer que a persistência de dados envolve um meio físico que permita recuperação de dados, como um banco de dados, um arquivo em disco, etc, o que garante a persistência das informações e sua posterior recuperação. Ao longo da execução de um sistema, a persistência de dados é fator crítico, pois determina o modelo de acesso aos dados persistidos, assim como o desempenho, a facilidade de acesso, a dificuldade de manutenção, a capacidade de rastreabilidade dos dados, o modelo de programação, etc. &lt;/P&gt;
&lt;P&gt;De modo geral, o modelo de persistência mais comum no mercado é o baseado em banco de dados relacional, onde através de &lt;EM&gt;SQL (Structured Query Language),&lt;/EM&gt; fazemos a navegação pelos dados persistidos. Nossas consultas são escritas em SQL e executadas sobre o banco, para a recuperação de informações específicas. Essa tecnologia é muito madura, difundida e padroniza, porém, apresenta muitos problema de acoplamento com a orientação a objetos. Vamos considerar que a orientação a objetos hoje é o modelo de programação de sistemas dominante. Assim, quando falamos sobre persistir nossos objetos de um modelo OO, falamos da persistência de objetos, o que exige um mapeamento. De fato, a persistência de objetos utilizando um modelo relacional envolve a discussão sobre o chamado &lt;EM&gt;Object-Relational Mappings&lt;/EM&gt;, ou &lt;EM&gt;mapeamento Objeto-Relacional&lt;/EM&gt;.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Revisitando o mapeamento objeto-relacional (ORM - Object-relational mapping)&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Como vimos, o mapeamento objeto-relacional é uma técnica que visa diminuir a chamada &lt;STRONG&gt;impedância&lt;/STRONG&gt; entre o modelo de objetos e o modelo relacional em banco de dados. Existe muita discussão em torno do assunto, já que alguns aspectos de ambos os modelos são conflitantes. Algumas vezes, você vai desejar um modelo de persistência que simplesmente faça a serialização de seus objetos para armazenamento. Em cenários de longo prazo, onde versionamento dos objetos persistidos é importante, você vai precisar ainda de algum mecanismo mais sofisticado, que faça um mapeamento objeto relacional considerando a versão dos objetos envolvidos.&lt;/P&gt;
&lt;P&gt;Mas a necessidade de se tornar transparente a persistência de dados, instâncias de objetos e informações de sistemas OO é uma constante. Frequentemente somos confrotados com a decisão sobre utilizar uma camada de persistência de nossos dados ou simplesmente manter o acoplamento de classes com estruturas relacionais de forma explícita.&lt;/P&gt;
&lt;P&gt;Por exemplo, quando pensamos num modelo objeto-relacional, pensamos numa tabela por classe, com artibutos primitivos representados por colunas. Da mesma forma, atributos complexos são representados por múltiplas colunas ou tabelas adicionais. E todo esse mapeamento é feito de forma transparente para o sistema, isolando o desenvolvedor desses detalhes durante a codificação da lógica de negócio. Agora, algumas otimizações ainda podem ser necessárias no modelo objeto-relacional, como reduções e transformações de schemas, para eliminação de colunas redundantes, validações, verbalizações para eliminação de ambiguidades, entre outras.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Visitando o ADO.NET Entity Framework&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Depois dessa introdução, vamos falar um pouco sobre o &lt;EM&gt;ADO.NET Entity Framework&lt;/EM&gt;. Ele está disponível através do link abaixo:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;ADO.NET Entity Framework Beta 3&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=15DB9989-1621-444D-9B18-D1A04A21B519&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Você ainda vai precisar de um pacote de ferramentas para trabalhar com ele, obtido aqui:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;ADO.Net Entity Framework Tools Dec 07 Community Technology Preview&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&amp;amp;displaylang=en" mce_href="http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&amp;amp;displaylang=en"&gt;http://www.microsoft.com/downloads/details.aspx?FamilyId=D8AE4404-8E05-41FC-94C8-C73D9E238F82&amp;amp;displaylang=en&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;De fato, o &lt;STRONG&gt;ADO.NET Entity Framework&lt;/STRONG&gt; é um pacote que integra as funcionalidades do ADO.NET 2.0 (com seus mecanismos de &lt;EM&gt;DataSet, DataAdapter, DbConnection, DbCommand&lt;/EM&gt; , etc), adicionando 2 novos componentes: o &lt;EM&gt;Entity Data Model&lt;/EM&gt; e o &lt;EM&gt;LINQ - Language Integrated Query&lt;/EM&gt;. &lt;/P&gt;
&lt;P&gt;Veja a figura a seguir que representa bem o pacote:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_4.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_4.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=238 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_1.png" width=456 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_1.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;De forma resumida, o &lt;STRONG&gt;Entity Framework&lt;/STRONG&gt; permite o mapeamento do modelo relacional para o modelo de negócio orientado a objetos na aplicação. Assim, parte importante da arquitetura do &lt;EM&gt;Entity Framework&lt;/EM&gt; são suas camadas internas: camada conceitual, camada de mapeamento e camada lógica. Essas 3 camada garantem o mapeamento ORM (&lt;EM&gt;Object-relational mapping&lt;/EM&gt;) conforme discutido anteriormente:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_10.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_10.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=261 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_4.png" width=518 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_4.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;No ambiente do Visual Studio, esse mapeamento é disponibilizado através da ferramenta &lt;STRONG&gt;Entity Model Code Generator Tool&lt;/STRONG&gt;, instalada com o pacote &lt;STRONG&gt;ADO.Net Entity Framework Tools&lt;/STRONG&gt;, citado acima. Veja uma figura da ferramenta em ação:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_12.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_12.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=415 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_5.png" width=525 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_5.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Observamos a parte inferior com o mapeamento entre colunas e propriedades das classes envolvidas no &lt;EM&gt;mapeamento objeto-relacional&lt;/EM&gt;. Esse mapa é mantido pelo &lt;EM&gt;EDM - Entity Data Model&lt;/EM&gt; presente na aquitetura.&lt;/P&gt;
&lt;P&gt;Nesse contexto surge o LINQ. &lt;STRONG&gt;LINQ&lt;/STRONG&gt; é um conjunto de recursos introduzidos no .NET Framework 3.5 que permite a realização de consultas diretamente em base de dados, documentos XML, estrutura de dados, coleção de objetos, etc. usando uma sintaxe parecida com a linguagem SQL. Como resultado, o desenvolvedor obtêm maior legibilidade no código final, assim como maior transparência sobre os detalhes de implementação de cada fonte de dados.&lt;/P&gt;
&lt;P&gt;Assim, sobre o &lt;EM&gt;Entity Framework&lt;/EM&gt; é possível aplicar &lt;EM&gt;consultas LINQ&lt;/EM&gt; em uma de suas variações. Veja:&lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_6.png" mce_href="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_6.png"&gt;&lt;IMG style="BORDER-TOP-WIDTH: 0px; BORDER-LEFT-WIDTH: 0px; BORDER-BOTTOM-WIDTH: 0px; BORDER-RIGHT-WIDTH: 0px" height=320 alt=image src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_2.png" width=496 border=0 mce_src="http://blogs.msdn.com/blogfiles/wcamb/WindowsLiveWriter/LINQ_C73F/image_thumb_2.png"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Alguns exemplos de variações LINQ são:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to Objects&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to DataSets&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to SQL&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to Entities&lt;/FONT&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;FONT color=#000080&gt;LINQ to XML&lt;/FONT&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Cada variação ainda contempla as características da fonte de dados alvo. &lt;/P&gt;
&lt;P&gt;Um exemplo de consulta &lt;EM&gt;&lt;STRONG&gt;LINQ to Entities&lt;/STRONG&gt;&lt;/EM&gt; segue abaixo:&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;FONT color=#000080&gt;string city = “London”; &lt;BR&gt;var query = from c in northwindContext.Customers &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; where c.City == city &lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; select c; &lt;BR&gt;foreach (Customers c in query) Console.WriteLine(c.CompanyName);&lt;/FONT&gt;&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Algumas considerações&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Quando devemos utilizar um modelo objeto relacional para a persistência de dados? De fato, alguns desenvolvedores e arquitetos têm iniciado o uso de camadas de persistência ORM em todas as suas soluções. Isso é um erro. Um dos grandes problemas no uso dessa camada é o desempenho final obtido. Muitas vezes, devido a presença de mecanismos de cache durante a execução das consultas e retorno de objetos, uma camada ORM pode significar um desempenho deteriorado para a aplicação. Concordamos que muitos cenários não são aderentes ao modelo ORM por serem críticos quanto ao SLA definido. Nesses casos, o mais indicado é um middleware de banco de dados de alto desempenho. Precisamos entender que existem cenários onde a fronteira entre a lógica de programação e a camada de persistência de dados simplesmente não precisa ser escondida, ao contrário, é importante estar bem definida para os componentes da arquitetura. Um exemplo semelhante ocorreu na discussão do CORBA sobre os objetos distribuídos. As estruturas internas para tornar transparente a localização de um objeto ou esconder o fato de que tínhamos uma rede entre os componentes envolvidos trouxe grande complexidade para algumas soluções, assim como um desempenho ruim em muitos cenários.&lt;/P&gt;
&lt;P&gt;Assim, devemos avaliar bem os benefícios de uma camada de persistência objeto relacional em nossa arquitetura, de acordo com as demandas reais de negócio que a solução irá atender. Entre os aspectos que podemos utilizar nessa decisão temos:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Desempenho &lt;/LI&gt;
&lt;LI&gt;Manutenabilidade&lt;/LI&gt;
&lt;LI&gt;Legibilidade &lt;/LI&gt;
&lt;LI&gt;Rastreabilidade de dados &lt;/LI&gt;
&lt;LI&gt;Facilidade de Depuração &lt;/LI&gt;
&lt;LI&gt;Escalabilidade &lt;/LI&gt;
&lt;LI&gt;Presença de múltiplos bancos de dados na solução &lt;/LI&gt;
&lt;LI&gt;etc. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Em posts futuros vamos conversar mais sobre o assunto. Fique ligado! &lt;/P&gt;
&lt;P&gt;Como referências adicionais, veja os links:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;EM&gt;Object-relational mapping&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A title=http://www.orm.net/ href="http://www.orm.net/" mce_href="http://www.orm.net/"&gt;http://www.orm.net/&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;ADO.NET Entity Framework &amp;amp; LINQ to Relational Data&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A href="http://code.msdn.microsoft.com/adonetefx/" mce_href="http://code.msdn.microsoft.com/adonetefx/"&gt;http://code.msdn.microsoft.com/adonetefx/&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;ADO.NET Team blog&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/adonet/" mce_href="http://blogs.msdn.com/adonet/"&gt;http://blogs.msdn.com/adonet/&lt;/A&gt; &lt;BR&gt;&lt;BR&gt;&lt;/LI&gt;
&lt;LI&gt;&lt;EM&gt;Data Team blog&lt;/EM&gt; &lt;BR&gt;Ref.: &lt;A href="http://blogs.msdn.com/data/" mce_href="http://blogs.msdn.com/data/"&gt;http://blogs.msdn.com/data/&lt;/A&gt; &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Por enquanto é só! Até o próximo post :)&lt;/P&gt;
&lt;P&gt;Waldemir&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8327768" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/wcamb/archive/tags/Entity+Framework/default.aspx">Entity Framework</category></item></channel></rss>