none
Não consegui fazer o Entity Framework gerar consultas satisfatórias RRS feed

  • Pergunta

  • Saudações !!!

    Creio que seja por desinformação pura mesmo, mas não consigo que Entity Framework produza uma query satisfatória em um join simples como:

    SELECT <qualquer coisa>
       FROM Master, Details
     WHERE Master.Codigo = Details.CodigoMaster
         AND Master.Filtro1 = variavel1
         AND Details.Filtro2 = variavel2

    Sempre o que tenho como consulta é algo semelhante a:

    SELECT 1 AS [C1], [Project1].<todas as colunas> AS <nome da respectiva coluna> FROM (
      SELECT [Extent1].<todas as colunas> AS <nome da respectiva coluna> FROM Master
      LEFT OUTER JOIN (SELECT Details INTEIRA SEM WHERE) AS [Extent2] ON [Extent1].[Codigo] = [Extent2].[CodigoMaster]
      WHERE (1 = CAST( [Extent1].[Filtro1] AS int)) AND (666 = [Extent2].[Filtro2])
    ) as [Project1]

    O meu problema maior é que em produção cada uma dessas tabelas tem milhoes de registros, e a idéia de um Select sem filtro como uma subquery me assusta.

    O que me indicam? Meu banco é um SQL 2008 R2.

    abraços


    narf
    • Editado FlávioCardoso quarta-feira, 20 de outubro de 2010 17:22 completando a query
    quarta-feira, 20 de outubro de 2010 17:20

Respostas

  • Olá,

    Eu uso com tabelas com mais de 50 milhões de registros e não tenho problema, primeiro vc deve desabilitar lazyloading e nos seu join usar o include para fazer ref com seu object, outra coisa quando vc termina a consulta vc faz um select nome do seu object, aqui vc pode especificar quais campos vc quer que ele retorne, pois se faz select seu object ele igual um select *.

    • Marcado como Resposta FlávioCardoso quinta-feira, 21 de outubro de 2010 16:21
    quinta-feira, 21 de outubro de 2010 11:05

Todas as Respostas

  • Olá,

    Eu uso com tabelas com mais de 50 milhões de registros e não tenho problema, primeiro vc deve desabilitar lazyloading e nos seu join usar o include para fazer ref com seu object, outra coisa quando vc termina a consulta vc faz um select nome do seu object, aqui vc pode especificar quais campos vc quer que ele retorne, pois se faz select seu object ele igual um select *.

    • Marcado como Resposta FlávioCardoso quinta-feira, 21 de outubro de 2010 16:21
    quinta-feira, 21 de outubro de 2010 11:05
  • Seilor,

    pelo que vi, o Query Optimizer dá jeito tranquilo. Montei estrutura semelhante com outro banco e a query foi diferente com desempenho semelhante.

    Valeu a dia.


    narf
    quinta-feira, 21 de outubro de 2010 16:21