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 :

Objet partiel et référence


Sujet :

Entity Framework

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut Objet partiel et référence
    Bonjour à tous,

    J'ai un problème à priori un peu tordu... Pour expliciter voici la structure objet et en base :

    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 class Niveau
    {
         public int Id {get; set;}
         public string Name {get; set;}
         public List<Item> Items {get; set;}
    }
     
    public class Item
    {
         public int Id {get; set;}
         public string Name {get; set;}
         public List<ItemLink> ItemLinkParents {get; set;}
         public List<ItemLink> ItemLinkEnfants {get; set;}
    }
     
    public class ItemLink
    {
         public int Id {get; set;}
         public string Name {get; set;}
         public double Ratio {get; set;}
         public Item Parent {get; set;}
         public Item Enfant {get; set;}
    }
    Dans ma base j'ai

    Item

    1 1
    | |
    | |
    n n

    ItemLink

    Donc chaque objet ItemLink est référencé deux fois (une fois en tant que parent et une fois en tant que fils) si on récupère tout les objets Item.

    Le problème est que j'ai des classes partiels sur Item et ItemLink et à la récupération les propriétés liées sont modifiés, dans les deux listes pour un même objet, y a t il un moyen pour empêcher EF à considérer que c'est la même instance ?

    J'ai pensé qu'une solution est de dire que les objets que je récup soit détaché du contexte, mais pas sûre de mon raisonnement.

    J'espère avoir pu expliciter mon problème,
    D'avance merci
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Perso j'ai rien compris... peux-tu essayer d'expliquer autrement ?

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    En fait, ce que j'ai c'est une base avec

    Item
    1 1
    | |
    n n
    ItemLink

    Donc dans Item j'ai deux associations une dans laquelle Item est parent, l'autre ou il est enfant...

    Ce que je veux concrètement c'est récupéré les enfants et les parents d'Item.

    En faisant quelques tests, j'ai fais une bidouille, en ajoutant des classes partiels, ce que j'ai fais c'est d'ajouter le type de lien dans chacune d'ItemLink des collections (au delà que ça soit pas très propres), j'ai eu la surprise de voir que l'ItemLink (l'instance) était la même que ce soit dans la collection des parents et des enfants...

    Du coup supposant que j'ai :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Item Item1 = new Item { Code = "Item1" };
    Item Item2 = new Item { Code = "Item2" };
     
    ItemLink ItemLink1  = new ItemLink { Code="IL1", ItemParent = Item1, ItemEnfant = Item2 };
    Quand je récupère ces données de la base je vais avoir :

    Item1 avec le Code et la liste des parents vide et la liste des enfants contenant ItemLink1.
    Item2 avec le code et la liste des parents contenant ItemLink1 et la liste des enfants vide.

    Et dans les deux collection ItemLink1 a le même lien au lieu d'avoir dans l'un parent et dans l'autre enfant (si EntityLink obtenait deux instances).
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Et dans les deux collection ItemLink1 a le même lien au lieu d'avoir dans l'un parent et dans l'autre enfant (si EntityLink obtenait deux instances).
    Je comprends pas cette phrase...

    Ton problème, c'est que ça ne charge qu'une seule instance de ItemLink qui se retrouve à la fois dans Item1.ItemLinkEnfants et dans Item2.ItemLinkParents ? Ca me semble normal...

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Je comprends pas cette phrase...

    Ton problème, c'est que ça ne charge qu'une seule instance de ItemLink qui se retrouve à la fois dans Item1.ItemLinkEnfants et dans Item2.ItemLinkParents ? Ca me semble normal...
    Oui, mais le problème est que si je modifie un ItemLink dans Item1.ItemLinkEnfants je vais retrouver la modif dans Item2.ItemLinkParents... Et c'est ce que je cherche à éviter.

    Maintenant que je l'ai constaté, ça me semble compréhensible (normal je sais pas lol), mais est ce évitable ? (en détachant les objets ou autre moyen ?).
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Points : 39 749
    Points
    39 749
    Par défaut
    Citation Envoyé par rad_hass Voir le message
    Oui, mais le problème est que si je modifie un ItemLink dans Item1.ItemLinkEnfants je vais retrouver la modif dans Item2.ItemLinkParents... Et c'est ce que je cherche à éviter.

    Maintenant que je l'ai constaté, ça me semble compréhensible (normal je sais pas lol), mais est ce évitable ? (en détachant les objets ou autre moyen ?).
    Plutôt que de chercher à modifier un ItemLink existant, crée un nouveau ItemLink et supprime l'ancien...

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    1 377
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 377
    Points : 1 628
    Points
    1 628
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Plutôt que de chercher à modifier un ItemLink existant, crée un nouveau ItemLink et supprime l'ancien...
    Ce que je faisait c'est modifié à la récupération (en ajoutant un type du lien).
    Échouer, c'est avoir la possibilité de recommencer de manière plus intelligente.

    Twitter Blog Mon site

    Mon article sur l'agilité

Discussions similaires

  1. [VB.NET]Objet passé par référence
    Par olbi dans le forum VB.NET
    Réponses: 4
    Dernier message: 02/07/2007, 14h28
  2. Association entre objet Id ou référence ?
    Par grosFab dans le forum Langages de programmation
    Réponses: 1
    Dernier message: 19/04/2007, 13h41
  3. Réponses: 1
    Dernier message: 06/04/2007, 17h59
  4. Réponses: 3
    Dernier message: 09/01/2007, 17h16
  5. Réponses: 10
    Dernier message: 02/01/2007, 12h07

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