IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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 :

[C# FW4] Relation N-N - Perte des informations lors de la lecture.


Sujet :

Entity Framework

  1. #1
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut [C# FW4] Relation N-N - Perte des informations lors de la lecture.
    Bonjour @ tous,

    J'ai une entité avec une propriété vers une autre table en many-to-many.
    Elle qui est bien renseignée suite à ma création.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var myEnt = new Ent();
    myEnt.id = 1;
    ...
    myEnt.relations = new System.Data.Objects.DataClasses.EntityCollection<relations>();
      foreach (DictionaryEntry item in myObj2.relations)
                    myEnt.relations.Add(new relations { ID = (int)item.Key, TITRE = item.Value.ToString() } );
    myEnt
    En debug, j'ai bien mes relations. Aucun soucis. Je peux faire mon SaveChanges() et les données sont toutes écrites.

    Seulement, lorsque je veux les récupérer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    myEnt= nl.myTable.Where(p => p.id == idParam).FirstOrDefault();
    Il me charge bien toutes les propriétés basiques correctement, mais pas mes relations.
    Sur le count de l'objet, il me met:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Count	'myEnt.relations.Count' a levé une exception de type 'System.ObjectDisposedException'	int {System.ObjectDisposedException}
    J'ai essayé de les recharger manuellement moi même:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //foreach (relations item in myEnt.relations) myEnt2.relations.Add(item);
    mais rien à faire, la propriété doit être lockée.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    EntityCollection n'a pas pu être initialisé, car le gestionnaire de relations de l'objet auquel EntityCollection appartient est déjà attaché à un ObjectContext. 
    La méthode InitializeRelatedCollection doit uniquement être appelée pour initialiser un nouveau EntityCollection pendant la désérialisation d'un graphique d'objets.
    Est ce que quelqu'un à une idée ?

    Merci d'avance.

  2. #2
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je viens de découvrir que cette donnée est perdue lors du retour de la fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
            public static myTable getEnt(int id) {
                myTable  nd = null;
                using (myAppEntities nl = new myAppEntities()) {
                    if (id > 0) {
                        nd = nl.myTable .Where(p => p.ID == id).FirstOrDefault();
                        if (nd != null)
                            return nd;
                    }
                }
                return nd;
            }
    myTable myEnt = myClass.getEnt(idTmp);
    Mon point d'arret sur le return m'indique bien les relations. Par contre, celui sur myEnt me retourne une erreur.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Salut,

    Pour commencer :
    Est ce que tu as essayé "Include" : Loading Related Entities

  4. #4
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Bonjour katkiller,

    Nos messages se sont croisés.
    Non, mais pas besoin vu que le résultat du where les retourne bien (tu confirmes ?).
    C'est au niveau de la récupération du retour de la fonction que ça coince.

  5. #5
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    J'ai malgré tout essayé ta solution, et ça fonctionne.
    Merci beaucoup.

    Par contre, j'ai un problème de rédaction.
    Dans ton lien, il donne plusieurs syntaxes différentes. Mais moi, il n'y en a qu'une qui veux bien compiler:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    nd = nl.myTable.Insert("relations") .Where(p => p.ID == id).FirstOrDefault();
    Je ne peux ni mettre une arborescence d'expression, ni mettre le Insert() après le Where().

    Ca m'intrigue, Peux tu m'éclairer ?
    Pour info, je suis en FW 4.5.1 et utilise un EDMX.
    [assembly: EdmSchemaAttribute()]

  6. #6
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Citation Envoyé par dacid Voir le message
    Dans ton lien, il donne plusieurs syntaxes différentes. Mais moi, il n'y en a qu'une qui veux bien compiler
    Problème de version d'EF ou juste des "using" manquant !

    Citation Envoyé par dacid Voir le message
    Pour info, je suis en FW 4.5.1 et utilise un EDMX.
    Tu veux dire que tu utilises le Framework .NET 4.5.1 ?
    Mais quel est ta version d'entity framework ?

  7. #7
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Voici mes using:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using AdminToile.Admin;
    using System.Data.Objects.DataClasses;
    using System.Collections;
    J'ai rajouté System.Data.Entity comme indiqué dans ton lien, mais ça ne change rien.

    La version d'entity décrite dans le web.config est fiable ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
    Si oui, j'ai la 4. Version du runtime de la DLL v4.0.30319

    Selon ton lien, j'ai un ancêtre d'entity. C'est surement pour ça que je ne peux pas les Linqer comme dans ton exemple.

    Merci encore pour tes réponses. Bonne journée (essayer de pas killer trop de kat quand même, hi)

  8. #8
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Citation Envoyé par dacid Voir le message
    Selon ton lien, j'ai un ancêtre d'entity. C'est surement pour ça que je ne peux pas les Linqer comme dans ton exemple
    Oui il y a déjà eu pas mal d'évolutions sur la version 4.1 (dont les "Include" en Lambda, si mes souvenirs sont bon)

    Citation Envoyé par dacid Voir le message
    Merci encore pour tes réponses. Bonne journée (essayer de pas killer trop de kat quand même, hi)
    De rien

    Ne t'inquiètes pas j'aime bien les chats... Je sais pas pourquoi j'ai choisi ce nom (presque 10 ans... ça ne me rajeunit pas)...

  9. #9
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Je reviens vers toi car j'ai un soucis.

    Les relations sont bien portées dans l'objet jusqu'au SaveChanges(), mais ça ne fonctionne pas pour la modification... Uniquement pour la création.

    Création: OK
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
                using (myAppEntities nl = new myAppEntities()) {
                    newnd.propr= false;
                    ...
                    nl.addmyTable(newnd);
                    nl.SaveChanges();
                }
    Modification: KO
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
                using (myAppEntities nl = new myAppEntities()) {
                    oldnd = nl.myTable.Include("relations").Where(p => p.ID== id).FirstOrDefault();
                    oldnd.propr = false;
                    nl.SaveChanges();
                }
    Il y a quelque chose à faire de spécial ?

  10. #10
    Membre averti Avatar de dacid
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 064
    Points : 420
    Points
    420
    Par défaut
    Pour info, j'ai fait comme ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
                    oldnd.relations.Clear();
                    newnd.relations.ToList().ForEach(delegate(relations c) { oldnd.relations.Add(nl.relations.Where(a => a.relations== c.relations).SingleOrDefault()); });
    Je pense qu'il y a plus simple, mais ça fonctionne bien.

  11. #11
    Membre éprouvé
    Homme Profil pro
    Architecte technique
    Inscrit en
    Septembre 2005
    Messages
    462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Architecte technique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 462
    Points : 1 056
    Points
    1 056
    Par défaut
    Désolé j'ai pas mal de taf... j'ai pas eu le temps de regarder !

    L'important c'est que ton problème soit résolu.

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

Discussions similaires

  1. [SP-2007] pertes des parametres lors d'une creation de site avec modele
    Par padej450 dans le forum SharePoint
    Réponses: 1
    Dernier message: 04/06/2009, 14h49
  2. Réponses: 11
    Dernier message: 24/04/2009, 23h00
  3. Réponses: 4
    Dernier message: 10/11/2008, 17h17
  4. [DOM] InnerHTML & formulaire, perte des informations
    Par bambou dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/07/2007, 16h35
  5. [MySQL] Perte d'information lors d'une requête de visualisation
    Par niccco dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/10/2005, 13h46

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