Ich habe eine Basisklasse und zwei abgeleitete Klassen.Entity Framework fragt abgeleitete Klassen nicht ab - Fehler in DbOfTypeExpression
Jede der abgeleiteten Klassen implementiert den gleichen Typ wie eine Eigenschaft - der einzige Unterschied ist der Name der Eigenschaft.
Leider habe ich nicht viel Einfluss auf das Klassen-Design -> sie wurden aus einer WSDL-Datei generiert.
Ich habe dann eine Eigenschaft auf dem BaseType, um die gemeinsame Eigenschaft einzukapseln. Der Plan war, diese Eigenschaft in meinen Web-Ansichten verwenden usw.
ich das berühmte „Fruit-Beispiel“ verwendet habe, um das Problem zu demonstrieren:
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 { }
In meinen MVC-Controller, die folgende Abfrage funktioniert absolut in Ordnung
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.ToList());
Aber dieses nicht:
return View(context.FruitEntities
.OfType<Apple>().Include(a =>a.AppleFruitness)
.OfType<Orange>().Include(o => o.OrangeFruitness)
.ToList());
Die Fehlermeldung erhalte ich ist :
DbOfTypeExpression erfordert ein Ausdrucksargument mit einem polymorphen Ergebnistyp, der mit dem Argument type kompatibel ist.
Ich verwende EF 5.0 RC und den Code First Ansatz.
Jede Hilfe wird sehr geschätzt!
Diese vielleicht, weil Ihr Ausdruck bedeutet 'Orange' ist ein' Apfel' – Eranga
Ich hätte gedacht, indem ich meine FruitEntities als 'DbSet definiert habe FruitEntities der Ausdruck impliziert, dass Orange und Apple Früchte sind ?! –
Flo
Die "OfType" -Kette sagt: "Alle Äpfel aus den FruitEntities filtern und dann aus dem Ergebnis alle Äpfel filtern, die Orangen sind", was nur Sinn ergibt, wenn Orangen Äpfel sind, d. H. 'Orange' Klasse erbt von' Apfel' Klasse. Was möchten Sie mit dieser Abfrage erreichen? Eine kombinierte Liste von Orangen und Äpfeln, d.h. alle Früchte, die Äpfel ** oder ** Orangen sind? – Slauma