Ho una classe base e due classi derivate.Entity Framework non esegue query sulle classi derivate - Errore in DbOfTypeExpression
Ciascuna delle classi derivate implementa lo stesso tipo di una proprietà - l'unica differenza è il nome della proprietà.
Purtroppo non ho molta influenza sul design della classe -> sono stati generati da un file wsdl.
Quindi ho una proprietà sul BaseType per incapsulare la proprietà comune. Il piano era di usare questa proprietà nei miei viste web ecc
ho usato il famoso "Fruit-Example" per dimostrare il 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 { }
Nel mio controller MVC, la seguente query funziona assolutamente bene :
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.ToList());
Ma questo non lo fa:
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.OfType<Orange>().Include(o => o.OrangeFruitness)
.ToList());
Il messaggio di errore che ottenga è :
DbOfTypeExpression richiede un argomento di espressione con un tipo di risultato polimorfico compatibile con l'argomento type.
Sto utilizzando EF 5.0 RC e l'approccio Code First.
Qualsiasi aiuto è molto apprezzato!
Questo forse perché la tua espressione implica 'Orange' è un' Apple' – Eranga
Avrei pensato definendo il mio FruitEntities come 'DbSet FruitEntities 'l'espressione implica che Orange e Apple sono frutti ?! –
Flo
La catena 'OfType' dice:" Filtra tutte le mele da FruitEntities e quindi filtra dal risultato tutte le mele che sono arance ", che ha senso solo se le arance sono mele, ad esempio la classe' Orange' eredita dalla classe 'Apple'. Cosa vuoi ottenere con questa query? Un elenco combinato di arance e mele, cioè tutti i frutti che sono mele ** o ** arance? – Slauma