Entity Framework - Wählen Sie bestimmte Spalten und Rückkehr stark typisierte ohne cast
Ich versuche, etwas ähnliches zu tun, um dieser Beitrag, wo ich nicht ziehen Sie wieder alle Spalten aus einer bestimmten Entität, aber mein framework verwenden inheritence und ich verliere Umfang der entity-Typ, nachdem es gegossen worden, um einen anonymen Typ.
Die Struktur meiner Entity Framework verfügt über eine Basis-Entität namens Aktion. Von hier aus habe ich zwei geerbt Wesenheiten Veranstaltung und Aktivität. Ich will zurück zu ziehen die letzten X Aktionen und übergeben Sie an meine stark typisierte Ansicht, die annimmt, eine Aktion, und von dort aus bestimmt, ob eine Aktivität oder ein Ereignis und macht die richtige Teilansicht.
if(Model.GetType() == typeof(Event))
{
//render Event view
}
else if(Model.GetType() == typeof(Activity))
{
//render Activity view
}
Ich ziehen kann, die letzten 10 als anonymer Typ und dann Darsteller:
var result = from a in new DataContext().Actions
where a.UserId == someGuidValue
select new { a.CreatedOn, a.Summary };
List<Action> list = result.AsEnumerable()
.Select(o => new Action {
CreatedOn = o.CreatedOn,
Summary = o.Summary
}).ToList();
Allerdings, wenn ich übergeben Sie die neue Liste der Aktionen, um mein stark typisierte Ansicht, es verliert an Umfang, egal ob es eine Aktivität oder ein Ereignis, da es gegossen worden, als eine Aktion. Meine Frage ist, ohne daß die Diskriminator-Spalte, gibt es eine Möglichkeit zu casten jedes Element auf den richtigen Typ, oder bin ich da etwa falsch?
InformationsquelleAutor XVargas | 2009-10-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Etwas notdürftigem, aber funktioniert:
Beispiel mit Typ-spezifischen Spalten vorauszusetzen, dass e.EventSpecific ist ein nullable-Typ.
Wenn o ist.EventSpecific ist eine non-nullable-Typ, dann müssen Sie es konvertieren zu einem nullable-Typ in den L2E-Abfrage.
Ich habe versucht, diese aus, aber es wurde schnell klar, dass ich laufen in das Problem, nicht in der Lage zurück zu ziehen Aktivität oder das Ereignis, dass bestimmte Spalten beim durchführen des ersten ziehen. Ich war gezwungen, eine Ansicht zu erstellen, zieht sich zurück die erforderlichen Spalten und ziehen Sie auch wieder die Diskriminator-Spalte. Nachdem ich ziehen Sie es zurück, und ich warf die stark typisiert ist. Nicht die ideale Lösung aber es funktioniert.
Sie können ziehen Sie den Untertyp Spalten, wenn du Sie in der original-L2E-Abfrage.
Tun Sie etwas dagegen, zeigt mir ein Beispiel? Ich habe Fehler, wenn ich versuchte, Sie zu Spalten umfassen, sind spezifisch für die Arten geerbt.
Beispiel nun Hinzugefügt.
InformationsquelleAutor Craig Stuntz
Sind Sie wahrscheinlich auf dem falschen Weg. Zunächst würde ich davon ausgehen, dass
Action
sollte eine abstrakte Klasse, und Sie sollten nicht in der Lage sein, um Instanzen zu erstellen. Wenn Sie dann nur Holen eine Teilmenge der Eigenschaften und der Teilmenge nicht mehr erlauben zu unterscheiden zwischen den Ereignissen und Aktivitäten, ist es wahrscheinlich der falsche Weg, um zu versuchen zu machen Ereignisse und Aktivitäten aus.Also es scheint in der Tat nicht um ein technisches problem - es sollte Recht einfach zu Diskriminierung gehören einige Informationen, die in dem anonymen Typ - aber ein design-problem. Ich schlage vor, zu überdenken, wenn es erforderlich ist, um zu unterscheiden, das Ergebnis der Abfrage und wenn ja, ob es wirklich eine gute Idee, um zu unterscheiden das Ergebnis in Ermangelung einer Diskriminator.
InformationsquelleAutor Daniel Brückner