Tengo una clase base y dos clases derivadas.Entity Framework no consulta las clases derivadas - Error en DbOfTypeExpression
Cada una de las clases derivadas implementa el mismo tipo que una propiedad; la única diferencia es el nombre de la propiedad.
Tristemente no tengo mucha influencia en el diseño de clase -> se han generado desde un archivo wsdl.
Luego tengo una propiedad en BaseType para encapsular la propiedad común. El plan era utilizar esta propiedad en mis puntos de vista web, etc
he utilizado el famoso "Fruit-Ejemplo" para demostrar el problema:
public class FruitBase
{
public virtual int ID { get; set; }
//
// The plan is to use this property in mvc view
//
[NotMapped]
public virtual FruitnessFactor Fruitness
{
get
{
if (this.GetType().BaseType == typeof(Apple))
return ((Apple)this).AppleFruitness;
else if (this.GetType().BaseType == typeof(Orange))
return ((Orange)this).OrangeFruitness;
else
return null;
}
}
}
public class FruitnessFactor { }
En mi controlador MVC, la siguiente consulta funciona absolutamente bien :
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.ToList());
Pero éste no:
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.OfType<Orange>().Include(o => o.OrangeFruitness)
.ToList());
El mensaje de error que consigo es :
DbOfTypeExpression requiere un argumento de expresión con un tipo de resultado polimórfico que sea compatible con el argumento de tipo.
Estoy utilizando EF 5.0 RC y el enfoque Code First.
¡Cualquier ayuda es muy apreciada!
Esto puede ser debido a que su expresión implica 'Naranja' es un' Apple' – Eranga
Lo habría pensado al definir mis FruitEntities como 'DbSet FruitEntities' la expresión implica que Orange y Apple son frutas? –
Flo
La cadena 'OfType' dice:" Filtra todas las manzanas de FruitEntities y luego filtra del resultado todas las manzanas que son naranjas ", lo cual solo tiene sentido si las naranjas son manzanas, es decir, la clase' Naranja 'hereda de la clase 'Apple'. ¿Qué quieres lograr con esa consulta? ¿Una lista combinada de naranjas y manzanas, es decir, todas las frutas que son manzanas ** o ** naranjas? – Slauma