EFProfiler– Entity Framework Profiler

Se você está trabalhando com EF4, provavelmente já se perguntou se os comandos SQL gerados estão realmente otimizados, ou talvez quando você tem algum problema de performance. Para responder a isto existem várias ferramentas de análise, ou profilers, e um destes é o EFProfiler.

A ferramenta é bastante simples, você baixa um executável do site www.efprof.com e segue as instruções contidas no arquivo “How to use.txt”.

Para o profiler funciona, você precisa adicionar a referência de um DLL do Profiler ao seu projeto:

image

Depois, no arquivo principal do projeto, você executa o inicializador do profiler:

   1: static void Main(string[] args)

   2: {

   3:     // Profiler

   4:     HibernatingRhinos.Profiler.Appender.EntityFramework.EntityFrameworkProfiler.Initialize();

   5:  

   6:     TesteEntities dc = new TesteEntities();

   7:  

   8:     var dados = from c in dc.Cliente

   9:                 select c;

  10:     foreach (var linha in dados)

  11:     {

  12:         Console.WriteLine(linha.Nome);

  13:     }

  14: }

No exemplo acima, temos uma simples consulta ao banco de dados.

Agora abra o profiler e execute sua aplicação, os resultados irão aparecer na tela:

image

É isto aí pessoal, bom profiler para vocês!

[]s,

Carlos dos Santos.

Windows Forms – atualizando o formulário de dentro de uma Thread

É relativamente comum termos uma aplicação que precise usar uma ou mais threads para realizar algum processo demorado onde o usuário não precise ficar esperando, mas às vezes é necessário também que esta thread faça algum tipo de interação com a tela, talvez atualizando alguma informação, barra de progresso, enfim, mostrar ao usuário que algo está acontecendo.

Uma tarefa relativamente simples, mas que pode causar um certo transtorno justamente por ser uma thread. Veja a aplicação abaixo em Windows Forms:

image

É uma tela bem simples, com um botão e uma barra de progresso. Agora vamos imaginar que este form tenha o código abaixo, que cria uma thread que atualiza a progressBar1:

   1: public partial class Form1 : Form

   2: {

   3:     private bool threadAtiva = false;

   4:  

   5:     public Form1()

   6:     {

   7:         InitializeComponent();

   8:     }

   9:  

  10:     private void btnIniciar_Click(object sender, EventArgs e)

  11:     {

  12:         

  13:         Thread processo = new Thread(new ThreadStart(ExecutaThread));

  14:         processo.Start();

  15:  

  16:         progressBar1.Maximum = 100;

  17:         progressBar1.Value = 0;

  18:  

  19:         threadAtiva = true;

  20:     }

  21:  

  22:     void ExecutaThread()

  23:     {

  24:         while (threadAtiva)

  25:         {

  26:             if (progressBar1.Value > 99)

  27:             {

  28:                 threadAtiva = false;

  29:                 return;

  30:             }

  31:             progressBar1.Value++;

  32:             progressBar1.Refresh();

  33:         }

  34:     }

  35: }


O código acima está correto, mas ao executar e clicar no botão iniciar, aparece o seguinte erro:

image

O erro acontece porquê a janela da aplicacação (UI) está executando em uma thread e agora nós temos outra thread executando o nosso processo e tentando atualizar a tela. Então como resolver isto ?

Simplesmente usando um Invoker:

   1: void ExecutaThread()

   2:        {

   3:            while (threadAtiva)

   4:            {

   5:                if (progressBar1.Value > 99)

   6:                {

   7:                    threadAtiva = false;

   8:                    return;

   9:                }

  10:                this.Invoke(new MethodInvoker(delegate()

  11:                {

  12:                    progressBar1.Value++;

  13:                    progressBar1.Refresh();

  14:                }));

  15:            }

  16:        }

Agora estamos atualizando a tela ou seja, o progressBar1 usando um Invoker que está sendo executando sob a thread principal, ou seja, o formulário. Neste exemplo eu usei o MethodInvoker() com um método anônimo, mas você poderia ter criado um método e chamado sem problemas e com isto você pode ter várias thread rodando e atualizando a interface do usuário.

É isto aí pessoal, espero que dica seja útil para vocês.

Um abraço e até a próxima.

Carlos dos Santos.

Consultas Genéricas com Linq

No conceito de orientação a objeto, sempre temos em mente criar códigos que possam ser reutilizados dentro da aplicação ou mesmo em aplicações diferentes, e neste contexto eu tenho sido questionado sobre como é possível usar Linq, que é totalmente orientado a objeto e fortemente tipado, e ainda sim criar códigos reusáveis.

Aproveitando esta situação, vou mostrar como é possível criar um método de consulta usando Linq, que serve para consultar praticamente qualquer entidade (tabela) do seu modelo, ou seja, iremos criar uma consulta totalmente genérica, e um dos possíveis lugares que você pode utilizar este tipo de método, é em uma rotina de consulta que você chama em todo o seu sistema, por exemplo.

Para o nosso exemplo, vamos criar um projeto console bem simples, lembrando que usaremos o Visual Studio 2010 com o Entity Framework 4:

image

Agora vamos adicionar o modelo do Entity Framework, para este exemplo usaremos o banco de dados Northwind, caso você não o tenha, baixe aqui. Para adicionar o modelo, clique com o botão direito do mouse sobre o seu projeto e vá em Add/New Item, ou CTRL + SHIFT + A e selecione Data e depois ADO.Net Entity Data Model. Escolha Generate from database e crie a conexão com o seu banco de dados Northwind. Selecione algumas tabelas, por exemplo: Categories, Products, Customers:

image

Criado o arquivo EDMX, vamos para o método de Consulta:

   1: static ObjectQuery<DbDataRecord> Consulta(string query, ObjectContext ctx)

   2: {

   3:     return new ObjectQuery<DbDataRecord>(query, ctx);

   4: }

Observação: adicione os seguintes namespaces:

using System.Data.Objects;

using System.Data.Common;

Parece que ficou complicado, mas é muito simples. Estamos retornando um objeto genérico do tipo DbDataRecord, e dentro do método, estamos retornando um novo ObjectQuery, que nos permite criar consultas dinamicamente. Vejamos um exemplo de chamada do método:

   1: static void Main(string[] args)

   2: {

   3:     NorthwindEntities ctx = new NorthwindEntities();

   4:  

   5:     var dados = Consulta("select c.ProductName,c.UnitPrice from Products as c" , ctx);

   6:  

   7:     foreach (DbDataRecord linha in dados)

   8:     {

   9:         Console.WriteLine(linha["ProductName"] + " - " + linha["UnitPrice"]);

  10:     }

  11: }

Primeiro criamos o contexto para o banco de dados Northwind, depois chamamos o método Consulta passando a nossa query e o contexto. Veja que a query se parece muito com uma consulta SQL, e neste caso estamos trazendo o ProductName e o UnitPrice da tabela Products.

Depois executamos um foreach() para mostrar os dados, usando o DbDataRecord para acessar os campos da consulta. Vejamos outro exemplo, agora trazendo dados também da tabela Categories:

   1: var dados = Consulta("select c.ProductName,c.UnitPrice,c.Categories.CategoryName from Products as c" , ctx);

   2:  

   3:             foreach (DbDataRecord linha in dados)

   4:             {

   5:                 Console.WriteLine(linha["ProductName"] + " - " + linha["UnitPrice"]+" - "+linha["CategoryName"]);

   6:             }


E para finalizar um exemplo com consulta condicional:

   1: var dados = Consulta("select c.ProductName,c.UnitPrice,c.Categories.CategoryName from Products as c where c.UnitPrice < 10" , ctx);

   2:  

   3:             foreach (DbDataRecord linha in dados)

   4:             {

   5:                 Console.WriteLine(linha["ProductName"] + " - " + linha["UnitPrice"]+" - "+linha["CategoryName"]);

   6:             }



Acredito que este simples exemplo possa ajudar no desenvolvimento de sua aplicação e mostre também a quantidade de funcionalidades existentes no Entity Framework 4.

[]s,

Carlos dos Santos.

Certificação .Net 4– Windows Developer

Pessoal,

 

Acabei de passar em mais uma prova beta do .Net 4.0 – Windows Developer 4. Lembrando que estas provas beta são lançadas gratuitamente antes do lançamento oficial do produto e servem para avaliar o conteúdo da prova, pois eles sempre têm mais questões que o normal, cerca de 80 questões cada prova, mas elas valem como certificação oficial, caso você passe.

 

 

cer

Abraços,
Carlos dos Santos.

Certificação em .Net 4.0

Pessoal,

Eu passei na prova beta do .Net 4.0 – Windows Application. Estas provas beta são lançadas gratuitamente antes do lançamento oficial do produto e servem para avaliar o conteúdo da prova, pois eles sempre têm mais questões que o normal, cerca de 80 questões cada prova, mas elas valem como certificação oficial, caso você passe.

No meu caso, eu fiz 3 provas do .Net 4.0 e recebi o resultado da primeira delas. Fiquem atentos pois estas provas são abertas a qualquer pessoa.

net4

Abraços,
Carlos dos Santos.

Agile Brazil 2010

Eu estive na quinta e sexta-feira (24 e 25/06) em Porto Alegre/RS para a Agile Brasil 2010 – Conferência Brasileira sobre Métodos Ageis de Desenvolvimento de Software e foi um evento realmente espetacular.

Primeiro por reencontrar vários amigos, depois pelos palestrantes, como Martin Flowler, um dos grandes influenciadores das metodologias ágeis. Nestes dias tivemos várias palestras e workshops , de alto nível, onde pudemos aumentar nosso conhecimento e trocar idéias.

Foi interessante também assistir ao jogo da seleção brasileira durante o evento, que foi transmitido nos telões do auditório principal e até serviram pipocas, show!!!

Para quem não foi, eu definitivamente recomendo que vá no próximo ano, onde teremos o keynote de abertura com Ken Schwaber, fundador da Scrum.org.

foto1
Martin Fowler no keynote de abertura.

foto2
Eu e o André Nobre.

foto3
Philippe Kruchten no keynote da sexta-feira

foto4
Jogo da Seleção Brasileira
foto5foto6
Movimentação durante o evento.
foto7

Fechamento do evento.

Abraços,
Carlos dos Santos

Professional Scrum Master

Pessoal, eu acabei de passar na prova do Professional Scrum Master (www.scrum.org). Agora só falta fazer a Professional Scrum Developer, que é baseada no Visual Studio Team System 2010.

Após realizar este segunda prova, eu poderei ministrar cursos oficiais de Scrum pela Scrum.Org.

Abraços,
Carlos dos Santos.

Palestra na Faccar de Rolândia/PR sobre Visual Studio 2010

Eu estive na Faculdade Paranaense – FACCAR, de Rolância/PR na última sexta-feira (11/06), para ministrar uma palestra sobre Visual Studio 2010 e as novidades da plataforma.

Neste evento, tive a oportunidade de mostrar recursos como programação dinâmina, paralelelismo, Entity Framework 4, WPF e Silverlight.

Gostaria de agradecer ao convite do Prof.Zanete e espero voltar mais vezes para mostrar os avanços tecnológicos da plataforma .Net

Vejam as fotos:

DSC04926 DSC04927 DSC04928 DSC04929

[]s,
Carlos dos Santos.

Scrum para o VSTS 2010

A Microsoft acaba de liberar o template Beta de Scrum para o Team Foundation Server 2010. Eu já tive oportunidade de trabalhar com ele na semana passada durante um curso de Professional Scrum Developer e está realmente muito bom.

Conheça o novo template no link: http://blogs.msdn.com/b/aaronbjork/archive/2010/05/25/announcing-team-foundation-server-scrum-v1-0-beta.aspx

[]s,
Carlos.

Dicas sobre Visual Studio Team System

Eu separei três dicas interessantes sobre VSTS 2010 para vocês:

1. Migrando para o TFS 2010
2. Configurando a análise estática de código
3. Introdução as ferramentas de arquitetura

No mesmo site existem diversas outras dicas sobre o VSTS. Os artigos estão em inglês, mas vale a pena dar uma olhada.

[]s,
Carlos.