Si tengo tres clases en el marco de la entidad.Recuperar solo la clase base de Entity Framework
class Base {}
class Left : Base {}
class Right : Base {}
y llamo DBContext.Bases.ToList();
Esto devuelve todas las instancias de Base
totalmente escrito en sus tipos heredados asociados, ya que algunas personas han notado, el rendimiento de EF en las estructuras de herencia grandes no es muy grande por decir lo menos . Mi consulta real en mi proyecto tiene 600 líneas de longitud, solo para devolver una entidad y tarda 2 segundos en generarla.
La consulta se ejecuta mucho más rápido si le dices qué tipo devolver, ya que no tiene que unirse a toda la estructura. p.ej.
DBContext.Bases.OfType<Left>.ToList();
or
DBContext.Bases.OfType<Right>.ToList();
Sin embargo ahora quiero SOLO devolver la clase base. Unfortunalty haciendo
DBContext.Bases.OfType<Base>.ToList();
hace lo mismo que DBContext.Bases.ToList();
Obtiene la estructura de herencia TODO ... ¿Hay alguna manera (sin hacer un nuevo tipo en EF) de SOLO devolviendo la clase Base al mirar a través de la colección Base?
En este momento no puedo acceder a mi cuenta real ...
Tal vez Yo aún no ha quedado claro, quiero traer de vuelta todos los objetos (incluyendo Base, izquierda y derecha), pero yo sólo quiero que la Clase base que se devolverá, incluso si en la base de datos son clases reales izquierda y derecha.
OFTYPE fue una buena sugerencia pero filtra todas mis entidades porque ninguna es el tipo de base real. Pero quiero devolver solo los valores de tipo Base en el objeto tipo Base.
¿Alguna idea?
Esto es, por desgracia, más difícil de lo que podría esperar, al menos en LINQ to Entities. En Entity SQL puede usar 'OFTYPE (SOLO ...)'. Alex James explica cómo hacerlo [en este consejo] (http://blogs.msdn.com/alexj/archive/2009/09/17/tip-35-how-to-write-oftypeonly-tentity.aspx "Sugerencia 35 - Cómo escribir OfTypeOnly <TEntity>() "). –