none
Entity Framework - Limite de la query armada RRS feed

  • Debate general

  • Buen dia, les comento el siguiente problema que se me presento a ver que me aconsejan hacer para resolver el inconveniente.
    Paso a explicar: 

    El sistema tiene varias entidades que refieren a categorías de comprobantes como  compra, venta, pagos, etc. Son aproximadamente 20 categorías. En la base de datos están representadas de la siguiente manera

    Tengo la tabla comprobantes que tiene datos generales a todas las categorías y después una tabla por cada categoría en donde se especifican columnas propias de cada categoría. EL modelo se armo con el método DataBase First y aplicamos herencia entre la tabla comprobantes y el resto, es decir todas las tablas de categorías de comprobantes heredan de la tabla comprobantes

    Comprobantes

    -- Comprobantes_venta

    -- Comprobantes_cobro

    -- etc

    Para acceder desde EF a consultar los comprobantes lo hago de esta manera:

    _context.Comprobantes.OfType<Comprobantes_Cobro>().Where(x => x.ID_Comprobante == id).FirstOrDefault();

    Pero tengo varias partes del sistema en donde se consulta directamente a comprobantes sin usar ofType y aca es donde viene el problema. Hace una semana se agregar columnas a una de las tablas de categorias y apartir de ese cambio, las consultas "NO CASTEADAS", me generan una query que hace que el Motor de SQL Server me de este error : 

    Internal error: An expression services limit has been reached. Please look for potentially complex expressions in your query, and try to simplify them.

    Lo que hicimos fue hacer el refactor de las querys que ocasionaban problemas, la cosa es que próximamente le voy a tener que seguir metiendo columnas y mas tablas de categorías al EDMX y esto cada vez va a empeorar mas la situación.

    La situacion es que EF no lo puedo reemplazar ya que todo el sistema es acoplado a el, tengo muchas SP agregados al EDMX y todas las querys tambien. Tampoco puedo cambiar la estructura de las tablas , porque seria salir a refactorizar mas de 200 SPs.

    Entonces lo que pense es acceder a los datos de otra forma de aca en adelante y que conviva con EF, como puede ser Dapper u otro ORM que arme las querys de una manera mas optima. Pero no se si esto es aconsejable o si existe otra forma de resolver este escenario.

    La version de EF que usamos es la 6Espero me pueden ayudar, saludos!!


    Patricio Urbieta

    martes, 18 de diciembre de 2018 15:15

Todas las respuestas

  • Hola. Puedes mostrar la consulta completa? Y como están definidas las clases que la conforman y si puedes mostrar la sentencia Sql mejor. Este problema ocurre porque SQL Server limita el número de identificadores y constantes que pueden estar contenidos en una sola expresión de una consulta. Este límite es de 65.535

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos


    • Editado Sergio Parra martes, 18 de diciembre de 2018 20:27
    martes, 18 de diciembre de 2018 20:17
  • Qué tipo de herencia estás aplicando? Seguro estás aplicando Table-Per-Type. Básicamente, debes evitar realizar consultas en los tipos base que tienen más de unos pocos tipos heredados de ellos cuando se utiliza TPT

    Si se solucionó tu consulta no olvides marcar la respuesta. Si te ayudó, vótala como útil. Saludos

    martes, 18 de diciembre de 2018 20:25