Entity Framework - Sélectionner des colonnes spécifiques et en retour fortement typé, sans perdre de cast
Je suis en train de faire quelque chose de similaire à ce post où je n'ai pas reculer toutes les colonnes d'une entité particulière, cependant mon cadre fait de l'utilisation de l'héritage et je perds le champ d'application du type d'entité après avoir été jeté d'un type anonyme.
De la structure de mon Cadre de l'Entité est une entité de base appelé Action. À partir de là, j'ai créé deux hérité d'entités appelées Événement et Activité. Je veux la tirer en arrière le dernier X Actions et de les transmettre à ma vue fortement typée qui accepte une Action et à partir de là, détermine si son d'une Activité ou d'un Événement et rend la bonne vue partielle.
if(Model.GetType() == typeof(Event))
{
//render Event view
}
else if(Model.GetType() == typeof(Activity))
{
//render Activity view
}
Je peux afficher les 10 derniers comme un type anonyme et puis cast:
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();
Cependant, une fois que je passe la nouvelle Liste d'Actions à mon fortement typé vue, il perd sa portée qu'il s'agisse d'une Activité ou d'un Événement puisqu'il a été jeté comme une Action. Ma question est, sans exposer la colonne discriminante, est-il possible de jeter chaque élément du type approprié ou je suis aller sur ce de la mauvaise façon?
OriginalL'auteur XVargas | 2009-10-29
Vous devez vous connecter pour publier un commentaire.
Un peu encombrants, mais les travaux:
Exemple avec le type spécifique de colonnes, en supposant que l'e.EventSpecific est d'un type nullable.
Si l'o.EventSpecific est d'un type non nullable, alors vous devez le convertir en un type nullable dans le L2E requête.
J'ai essayé ceci, mais il est vite devenu évident que je courrais dans la question de ne pas être en mesure de tirer vers l'arrière de l'Activité ou à un Événement spécifique des colonnes lors de l'exécution de l'attraction initiale. J'ai été obligé de créer une vue qui tire les colonnes nécessaires et aussi reculer la colonne discriminante. Après je le tire en arrière je l'ai jeté à la fortement typé. Pas la solution idéale, mais il fonctionne.
Vous pouvez retirer le sous-type des colonnes si vous les incluez dans l'original L2E requête.
Pouvez-vous me montrer un exemple? J'ai eu des erreurs si j'ai essayé d'inclure des colonnes qui sont spécifiques à l'héritage types.
Exemple d'ajouter.
OriginalL'auteur Craig Stuntz
Vous êtes probablement sur le mauvais chemin. Au début, je suppose que
Action
devrait être une classe abstraite et vous ne devriez pas être en mesure de créer des instances. Si vous avez ensuite seulement à extraire un sous-ensemble des propriétés et le sous-ensemble ne plus permettre de discriminer entre les événements et les activités, il est probablement le mauvais sens pour essayer de réaliser des événements et des activités.Donc il semble en fait ne pas être un problème technique, il devrait être assez facile d'inclure une certaine discrimination à l'information du type anonyme - mais un problème de conception. Je suggère de repenser si elle est nécessaire pour distinguer le résultat de la requête et, si oui, si c'est vraiment une bonne idée de discriminer le résultat, en l'absence d'un discriminateur.
OriginalL'auteur Daniel Brückner