Nuno Filipe Godinho

Tudo sobre .NET e Arquitectura

Recent Posts

Tags

News

Community

Email Notifications

Archives

Agosto 2009 - Posts

Melhorias ao Entity Framework 4.0 / Improvements in Entity Framework 4.0 (PT/EN)

(PT)

   Com o .NET 4.0 bastantes novas funcionalidades e tecnologias irão ver a luz do dia, ao mesmo tempo que outras irão ser melhoradas, e a Entity Framework é uma dessas tecnologias que serão melhoradas.

   Muitas destas alterações estão a ser efectuadas ao nível da geração das Queries, o que significa que estão a ser efectuadas ao nível da conversão de Linq para código SQL, e algumas dessas alterações que estão na Beta 1 são as seguintes:

  1. Evitar projectar todas as colunas em queries embutidos
    • Ao invez de efectuar uma query a todas as colunas e depois efectuar a projecção sobre a mesma, simplesmente efectuar imediatamente a projecção e obter apenas as colunas necessárias
  2. Evitar a utilização desnecessária de verificações de IS NULL em queries LINQ to Entities
    • Retirar a utilização de verificações de null em Joins
  3. Outras melhorias nos Joins:  Eliminar a utilização de uma tabela principal em “Left Outer Join”
    • Evitar a necessidade te ter um left outer join para as tabelas principais se as colunas dessas tabelas não são necessárias na projecção
  4. Utilização de IN em vez de OR’s interligados
    • Em vez de utilizar diversos Or’s do género “CategoryId = 1 OR CategoryID = 2 (…)” utilizar “CategoryId In (1,2,…)”
  5. Traduzir mais operadores GroupBy de Linq para SQL GROUP BY
    • Melhor utilização do Group By de SQL de forma a simplificar as queries
  6. Evitar o “Cast (1 as bit)”, utilizar em vez disso o “1”
  7. Simplificar algumas queries através da utilização de subtipos de uma hierarquia

   Algumas das melhorias para depois da Beta 1:

  1. Eliminar os null sentinels
    • Na query gerada muitas vezes existe uma constante 1 que é projectada em ambas as queries. Ao evitar que isto aconteça e ao reutilizaar outras colunas para atingir o mesmo objectivo em muitos casos conseguimos evitar diversos niveis de interligados.
  2. Mais melhorias nos Joins
  3. Utilização dos Inner Joins em vez dos Left Outer Joins sempre que possível
  4. Melhorar o mecanismo de forma a fornecer queries mais eficientes em colunas não Unicode
    • Actualmente são geradas constantes e parâmetros não unicode quando os mesmos são utilizados em queries LINQ to Entities comparativamente com colunas não unicode. Isto permite que possam ser utilizados indices de SQL Server.
  5. Melhorias nas funções de tradução String.StartsWith, String.Contains e String.EndsWith em LINQ to Entites para a utilização do LIKE.
  6. Melhorias na tradução das funções canónicas StartsWith, Contains e EndsWith para utilizar o LIKE (estas funções canónicas estão disponíveis com a versão .NET 4.0 Beta1)
  7. Agrupar diversos cases num único

   Podem ler mais acerca deste tópico neste post da equipa ADO.NET.

(EN)

   With .NET 4.0 a lot of new features and technologies will see the light, as long as others will get improved, and Entity Framework will be one of those technologies that will get improved.

   A lot of this changes are being made on the Query pipeline, that means that are being done on the translation from Linq to SQL code, and some of the changes in Beta 1 are the following:

  1. Avoid projecting all columns in nested queries
    • Instead of making a query for the complete set of columns and the make the projection on top of it, just make the projection and get only the needed columns
  2. Avoiding Unnecessary IS NULL Checks in LINQ to Entities Queries
    • remove the Is null check when using Joins
  3. Additional join elimination:  Eliminate parent table in “Child Left Outer Join Parent”
    • Avoid having a child left outer join if no column from that relation is needed for the projection
  4. Using IN instead of nested OR’s
    • Instead of having several Or’s in place such as “CategoryId = 1 OR CategoryID = 2 (…)” have “CategoryId In (1,2,…)”
  5. Translating more of LINQ’s GroupBy operator into GROUP BY
    • Better use of the SQL Group By in order to simplify the query
  6. Avoiding “Cast (1 as bit)”, using “1” instead
  7. Simplifying some queries that go against a subtype in a type hierarchy

   Some of the changes after Beta 1:

  1. Elimination of null sentinels
    • In the output query there is often the constant 1 projected both in nested and in top-most queries. By avoiding it and reusing other columns for the same purpose in many cases we are able to avoid levels of nesting.
  2. Additional Join Elimination
  3. Use of Inner Joins instead of Left Outer Joins when possible
  4. Provide mechanism for efficient queries on non-Unicode columns
    • We now generate non-unicode constants and parameters when these are used in LINQ to Entities queries in comparisons with non-unicode columns. This allows indexes to be used by SQL Server.
  5. Improve the translation of the functions String.StartsWith, String.Contains and String.EndsWith in LINQ to Entites to use LIKE.
  6. Improve the translation of the canonical functions StartsWith, Contains and EndsWith to use LIKE (these canonical functions became available in .NET 4.0 Beta1)
  7. Collapse multiple Case statements into one

   You can read more about this topic on this ADO.NET Team post.

Controlos Interessantes de Geração de Diagramas / Interesting Diagram Generation Controls (PT/EN)

(PT)

Faz algum tempo andei a pesquisar por controlos que fizessem a geração de diagramas de diversos tipos, como por exemplo:

  • Diagrama de Rede
  • Worlflows
  • Bases de Dados
  • Grafos
  • Hierarquicos

  Básicamente estava á procura de um controlo que me resolvesse o problema de andar constantemente á procura de controlos para os diferentes tipos de diagramas que ia necessitando ao longo dos diferentes projectos, e que neste caso era para um projecto de Silverlight. Depois de muita pesquisa e de muitos controlos quer no CodeProject, entre outros encontrei exactamente aquilo que pertendia, e encontrei neste controlo da MindFusion denominado DiagramLite.

  O Diagram Lite é um controlo muito interessante que proporciona colocar qualquer tipo de diagrama em Silverlight e com a possibilidade de edicção do mesmo, o que faz com que possamos disponibilizar por exemplo um novo designer para o Workflow na nossa solução utilizando o Silverlight. (Eu sei que chegou-se a fazer isto sem este controlo, o que me parece é que com ele seria bastante mais simples, pelo menos foi essa a minha experiência).

  Podem encontrar exemplos aqui.

  Para além da versão Silverlight descobri que têm também versões para WPF, WinForms, ASP.NET, .Net Compact Framework e até Java, por isso parece-me que são bastante especialistas em diagramas, e pela minha experiência com eles, valem a pena pois o suporte responde com bastante clareza e rápidamente.

  Espero que este post vos dê jeito, uma vez que quando necessitei deste tipo de controlos tive de andar a pesquisar bastante e a testar diversas possibilidades.

(EN)

Some time from now I was searching for controls that would made the generation of diagrams of several kinds, like for instance::

  • Network Diagram
  • Worlflow Diagram
  • Database Diagram
  • Hierarchy Diagram

  Basically I was trying to find a control that would solve the problem of having to search for different controls depending on the type of diagrams I would need in my projects, an in this case the project was in Silverlight. After a lot of research and a lot of CodeProject and others that would just fit a specific problem, I came across one that solved exactly what I was needing, and I found it on MindFusion named DiagramLite.

  The DiagramLite is a quite interesting control since it provides a way for us to make available any kind of diagram in Silverlight and with the possibility of editing that diagram, and this makes it possible to create a new Workflow designer for our solutions using Silverlight. (Of course I now that this was done without this control, but it seems to me that it would be a lot easier with it, but this is just from my experience).

  You can find samples here.

  Along with the Silverlight version I also found that they also have several other versions for WPF, WinForms, ASP.NET, .Net Compact Framework and even Java, and for this it seems that they are pretty experts into the Diagram controls, and it’s pretty interesting since their support is pretty quick as well as clear.

  I hope this post comes handy for you, since when it was me I had to to do a lot of searching and testing for several possibilities.

Posted: 6-8-2009 18:13 por Nuno Filipe Godinho | with no comments
Filed under: ,
ADO.NET Data Services (PT/EN)

(PT)

Os ADO.NET Data Services conforme expliquei num post anterior são bastante interessantes pois criam uma camada de serviços e expõe o nosso modelo de dados de uma forma REST. Sendo esta uma tecnologia bastante interessante e sem dúvida de enorme utilização dentro das nossas soluções, nem sempre nos lembramos da notação de forma a que possamos fazer acções como:

  • Ordenação - orderby
  • Filtros - filter
  • Selecção de apenas um determinado número de elementos – Top
  • Ignorar um conjunto de registos – Skip
  • Efectuar operações sobre Strings
    • substring
    • endswith
    • startswith
    • length
  • Efectuar operações sobre Datas
    • day
    • month
    • year
    • hour
    • minute
    • second
  • Efectuar operações matemáticas
    • round
    • floor
    • ceiling
  • Efectuar operações de tipos
    • isof
    • cast

Se vocês forem como eu, nunca se conseguem lembrar da notação exacta para a sua utilização, por isso mesmo pensei que seria interessante colocar aqui o link para a ADO.NET Data Services Datasheet disponibilizado pelo Robert Maclean.

E mais uma vez agradecer ao Robert pelo excelente trabalho na criação deste Datasheet que tanto jeito dá.

(EN)

As I already explained in a previous post, ADO.NET Data Services are very interesting since they generate a layer on top of our data model in a REST accessible way. Being this technology without any doubt very interesting and very helpful when building our solutions, we don’t always remember the notation that we should use in order to execute actions like:

  • Sorting - orderby
  • Filtering - filter
  • Selection of only a determined set of elements – Top
  • Ignore a set of records – Skip
  • Make String operations
    • substring
    • endswith
    • startswith
    • length
  • Make Date operations
    • day
    • month
    • year
    • hour
    • minute
    • second
  • Make Math operations
    • round
    • floor
    • ceiling
  • Make Type operations
    • isof
    • cast

If you’re like me, you never remember the exact notation to use, and for this reason I reminded that it could be interesting to place here a link for the ADO.NET Data Services Datasheet provided by Robert Maclean.

And once again thank Robert for his excellent job into creating this Datasheet that comes so handy.