0

J'ai une question relativement simple sur les modèles asp.net MVC.Récupération des données d'un modèle composé de plusieurs tables dans une relation un-à-plusieurs

J'ai un modèle basé sur deux tables qui sont liées dans une relation un-à-plusieurs.

tableau AnimalGroup (ID, nom)

tableau AnimalSubGroup (ID, nom, AnimalGroupID)

Chaque AnimalGroup a un nombre quelconque de AnimalSubgroups. Comment parcourir les AnimalSubGroups de chaque AnimalGroup et obtenir AnimalSubGroup.name (par exemple)? Je suis nouveau sur asp.net MVC et j'ai suivi différents tutoriels, mais bien qu'ils soient excellents pour obtenir une application de base et obtenir des résultats sur une seule table, je suis bloqué sur la façon dont j'obtiendrais des résultats à partir de plusieurs tables liées dans le même modèle. J'ai vu des références à ViewModel comme une solution, mais il semble que ViewModel est plus utile pour mettre des données de deux tables non liées dans une seule vue.

Merci d'avance.

+0

Qu'est-ce que vous utilisez pour accéder à votre base de données? Linq à SQL? –

+0

Je ne suis pas sûr - j'utilise Visual Studio avec le plugin MVC, et je suis simplement en train de suivre l'assistant pour créer un modèle qui contient des tables DB. – sslepian

+0

Je vois. Eh bien, la chose est ASP.NET MVC est juste un cadre pour développer des applications web. Donc, sans savoir ce que vous utilisez pour obtenir vos entités et les renvoyer à vos opinions, répondre à votre question est un peu difficile. Cela aiderait si vous pouviez fournir plus de détails dans la question. –

Répondre

0

Premier. Avez-vous des clés étrangères définies dans votre base de données? Si oui, le générateur de modèle edmx définira toutes les connexions. Si non, faites-le maintenant. Quand cela est fait, vous pouvez sélectionner le nom sous-groupe par:

  1. Prenant directement à partir du contexte:

    context.AnimalSubGroupSet.Where (sg => sg.AnimalGroupID = requestedAnimalGroupID) .Select (sg => sg.Name) .ToList;

  2. prenant de AnimalGroup:

    animalGroup.AnimalSubGroups.Select (sg => sg.Name);

Ce code peut nécessiter des ajustements, mais ils ne doivent pas être compliqués.

+0

Ni l'un ni l'autre ne semble fonctionner: le contexte n'existe même pas, et le second fonctionne mais renvoie une liste vide (et ma base de données n'est pas vide). Je définis AnimalGroupEntities private _animalGroupDataModel = new AnimalGroupEntities(), puis je le passe à la vue en tant que return View (_animalGroupDataModel.AnimalGroup.ToList()); Dans la vue, j'ai var groupes = item.AnimalGroupSubcategory.Select (sg => sg.name); et ensuite je passe en revue les entrées des groupes, c'est là que les choses tombent en panne. Je m'excuse pour le désordre du commentaire - est-il possible d'ajouter des sauts de ligne? – sslepian

+0

@sslepian: Si vous voulez utiliser la seconde, vous devez d'abord appeler 'animalGroup.AnimalSubGroups.Load()'. Et pour le premier 'context = _animalGroupDataModel'. – LukLed

+0

Oh wow, ça l'a résolu. Merci beaucoup! Sur une note connexe, y a-t-il un bon tutoriel pour le cadre d'entité ado.net que vous recommanderiez? Aucun de ceux que j'ai trouvé n'a couvert cela, et beaucoup d'entre eux utilisent LINQ, ce qui n'est pas vraiment utile pour moi. – sslepian

0

Vous devriez peut-être jeter un oeil à l'opérateur de requête SelectMany de LINQ. Cela sous-itère sur les relations de table de données un-à-plusieurs. Notez que vous pouvez enchaîner les appels SelectMany:

var mymanyselections = datacontext.parenttable.SelectMany(l=>l.Name).SelectMany(m=>m.Name); 

Cela suppose que vous avez des relations clés étrangères dans vos tableaux de données.

Questions connexes