Pergunta

Quando usando o Entity Framework, não ESQL um desempenho melhor do que o Linq para Entidades?

Eu preferiria usar o Linq para Entidades (principalmente por causa do forte-verificação de tipo), mas alguns dos meus outros membros da equipe estão citando o desempenho como um motivo para usar o ESQL.Eu gostaria de obter uma idéia do pro/contras do uso de cada método.

Foi útil?

Solução

As diferenças mais óbvias são:

Linq to Entities é fortemente tipada código, incluindo nice consulta a compreensão da sintaxe.O fato de que "a partir de" vem antes de "selecionar" permite que o IntelliSense para ajudá-lo.

Entity SQL utiliza a tradicional cadeia de caracteres com base consultas com um mais familiar SQL como sintaxe, onde a instrução SELECT vem antes de PARTIR.Porque eSQL é a cadeia de base, consultas dinâmicas podem ser compostas de uma maneira tradicional, em tempo de execução usando manipulação de seqüência de caracteres.

A menos óbvia diferença chave é:

Linq to Entities permite que você altere a forma ou "projeto" os resultados da consulta em qualquer formato que você precisar com o "select new{...} sintaxe".Os tipos anônimos, novo para o C# 3.0, tem permitido que esse.

Não é possível projeção usando o Entity SQL como você sempre deve retornar um ObjectQuery<T>.Em alguns cenários, é possível usar ObjectQuery<object> no entanto, você deve contornar o fato de que .Selecione sempre retorna ObjectQuery<DbDataRecord>.Consulte o código abaixo...

ObjectQuery<DbDataRecord> query = DynamicQuery(context,
        "Products",
        "it.ProductName = 'Chai'",
        "it.ProductName, it.QuantityPerUnit");

public static ObjectQuery<DbDataRecord> DynamicQuery(MyContext context, string root, string selection, string projection)
{
    ObjectQuery<object> rootQuery = context.CreateQuery<object>(root);
    ObjectQuery<object> filteredQuery = rootQuery.Where(selection);
    ObjectQuery<DbDataRecord> result = filteredQuery.Select(projection);
    return result;
}

Há outros, mais sutis diferenças descrito por um dos membros da equipe em detalhe aqui e aqui.

Outras dicas

ESQL também pode gerar alguns particularmente vicioso sql.Eu tinha que controlar um problema com uma consulta que estava usando classes herdadas e descobri que meu pidly-pouco ESQL de 4 linhas tem traduzido em um 100000 caracteres monstro SQL statetement.

Fez a mesma coisa com o Linq e o código compilado foi muito mais gerenciáveis, vamos dizer 20 linhas de SQL.

Além disso, o que outras pessoas mencionadas, Linq é fortemente tipo, embora muito chato para depurar sem o recurso edit and continue.

ANÚNCIO

Entity SQL (eSQL) permite que você faça coisas como consultas dinâmicas mais facilmente do que o LINQ to Entities.No entanto, se você não tiver um cenário que requer eSQL, gostaria de ser insegura para contar sobre ele através de LINQ, porque ele vai ser muito mais difícil de manter (e.g.não mais verificação em tempo de compilação, etc.).

Eu acredito que o LINQ permite que você pré-compila as consultas, bem como, que seja capaz de dar-lhe um melhor desempenho.Rico Mariani um blog sobre o LINQ desempenho um tempo atrás e discute compilado consultas.

bom gráfico mostrando as comparações de desempenho aqui: Entity Framework Desempenho Explorado não há muita diferença entre ESQL e Entidades mas, em geral, diferenças significativas na utilização de Entidades sobre as Consultas directas

Entity Framework utiliza duas camadas de mapeamento de objeto (em comparação com uma única camada em LINQ para SQL), e o mapeamento adicional tem de desempenho de custos.Pelo menos no EF versão 1, designers de aplicativos deve escolher o Entity Framework somente se a modelagem e mapeamento ORM recursos podem justificar o custo.

A mais de código, você pode cobrir com tempo de compilação verificar para mim é algo que eu gostaria de colocar um prêmio maior do que o desempenho.Tendo dito que, na presente fase, eu provavelmente inclinar-se para ESQL não apenas por causa do desempenho, mas também (no presente) muito mais flexível no que ele pode fazer.Não há nada pior do que usar uma pilha de tecnologia que não tem um recurso que você realmente precisa.

O entity framework não oferece suporte a coisas como propriedades personalizadas, consultas personalizadas (para quando você precisa realmente ajustar o desempenho) e não funcionam da mesma maneira como linq para sql (por exemplo,existem funções que simplesmente não funcionam no entity framework).

A minha impressão pessoal sobre o Entity Framework é que há um grande potencial, mas é provavelmente um pouco para "rígida" em implementação para uso em um ambiente de produção em seu estado atual.

Para consultas directas eu estou usando linq to entities, para consultas dinâmicas estou usando ESQL.Talvez, a resposta não ou/ou, mas e o/também.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top