Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Entity Framework Discussion :

Comment sélectionner les éléments d'une liste ? [Débutant]


Sujet :

Entity Framework

  1. #1
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Ingénieur d'études et de développement C#
    Inscrit en
    février 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études et de développement C#
    Secteur : Conseil

    Informations forums :
    Inscription : février 2007
    Messages : 814
    Points : 1 244
    Points
    1 244
    Par défaut Comment sélectionner les éléments d'une liste ?
    Bonjour,

    J'ai une classe EventModel et une classe CharacterModel. Chacune d'elle possède une collection "virtual" des éléments de l'autre. Il s'agit une relation n..n.

    Je veux retrouver dans ma vue d'index MVC3 toutes les instances de EventModel qui possèdent dans leur collection de CharacterModel celui dont l'id est passé en paramètre (nullable) de ma méthode.
    Dans ce tutoriel, j'ai vu qu'il fallait utiliser un viewmodel pour manipuler les objets avec relation.

    J'ai donc fait le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if(characterId != null)
    {
    	viewModel.Characters = viewModel.Events.Where(h => h.Characters.Select(c => c.CharacterId == characterId.value) != null).Single().characters;
    	viewModel.Events = viewModel.Characters.Where(c =W c.CharacterId == characterId.value).Single().Events;
    }
    Le problème est que, sur la première ligne, il me jette une exception disant que CharcaterModel ne contient pas de propriété de navigation appelée CharacterId. J'ai bien ce champ dans mon objet du modèle (c'est la PK en base) !

    Comment faire ?
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  2. #2
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Ingénieur d'études et de développement C#
    Inscrit en
    février 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études et de développement C#
    Secteur : Conseil

    Informations forums :
    Inscription : février 2007
    Messages : 814
    Points : 1 244
    Points
    1 244
    Par défaut
    Le problème venait de plus haut (la ligne commentée):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
            public ViewResult Index(int? searchYear, int? characterId)
            {
                var viewModel = new HistoricalEventIndexData();
                viewModel.HistoricalEvents = db.HistoricalEvents.OrderBy(h => h.StandardYear);
                //viewModel.HistoricalEvents = db.HistoricalEvents.Include(h => h.Characters.Select(c => c.CharacterId)).OrderBy(h => h.StandardYear);
     
                if (searchYear != null)
                {
                    viewModel.HistoricalEvents = viewModel.HistoricalEvents.Where(h => h.StandardYear == searchYear.Value);
                }
     
                if (characterId != null)
                {
                    viewModel.Characters = viewModel.HistoricalEvents.Where(h => h.Characters.Select(c => c.CharacterId == characterId.Value) != null).Single().Characters;
                    viewModel.HistoricalEvents = viewModel.Characters.Where(c => c.CharacterId == characterId.Value).Single().History;
                }
     
                foreach (var item in viewModel.HistoricalEvents)
                {
                    FieldConvertor.ConvertStringPropertiesTags(item, FieldConvertor.ConvertMode.WikiToHtml);
                }
     
                return View(viewModel.HistoricalEvents);
            }
    Mais ma méthode ne fonctionne toujours pas.
    J'ai une erreur indiquant
    Un DataReader associé à cette Command est déjà ouvert. Il doit d'abord être fermé.
    sur l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewModel.Characters = viewModel.HistoricalEvents.Where(h => h.Characters.Select(c => c.CharacterId == characterId.Value) != null).Single().Characters;
    Il y a surement quelque chose de mal fait dans cette méthode, mais quoi ???
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

  3. #3
    Membre éprouvé Avatar de kheironn
    Homme Profil pro
    Ingénieur d'études et de développement C#
    Inscrit en
    février 2007
    Messages
    814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur d'études et de développement C#
    Secteur : Conseil

    Informations forums :
    Inscription : février 2007
    Messages : 814
    Points : 1 244
    Points
    1 244
    Par défaut
    Il semblerait, d'après mes recherches sur le net, que l'instruction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    viewModel.HistoricalEvents = db.HistoricalEvents.Include(h => h.Characters.Select(c => c.CharacterId)).OrderBy(h => h.StandardYear);
    soit bonne.

    J'en reviens donc à ma première question, comment régler le pbm de propriété de navigation.
    En informatique, le problème se situe toujours entre le clavier et l'écran !
    Il y a deux chemins entre le clavier et l'écran : Par l'UC et par l'utilisateur.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/02/2015, 16h55
  2. Réponses: 3
    Dernier message: 03/11/2011, 12h04
  3. Réponses: 3
    Dernier message: 18/03/2008, 22h55
  4. Réponses: 3
    Dernier message: 15/05/2006, 17h09
  5. Sélectionner un élément dans une liste multiple
    Par sourivore dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 28/03/2006, 12h47

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo