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 :

Lazy loading désactivé et récupération des priopriétés de navigation


Sujet :

Entity Framework

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par défaut Lazy loading désactivé et récupération des priopriétés de navigation
    Bonjour à vous,

    J'ai un comportement que je ne comprend pas,
    J'ai un solution qui comporte un projet DAL avec entity framework et un projet ASP MVC 4 webAPI.

    Je veux récupérer une chaine JSON qui correspond à tous mes appel d'offre.
    (voir schéma)

    je fais donc cette requête dans mon contrôleur API :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
            public IEnumerable<appelOffre> GetappelOffres()
            {
                var appeloffres = db.appelOffres.Include(a => a.entreprise).Include(a => a.statutAppelOffre).Include(a => a.source);
                return appeloffres.AsEnumerable();
            }
    J'ai mis le lazy loading à false :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        public partial class DALEntities : DbContext
        {
            public DALEntities()
                : base("name=DALEntities")
            {
                this.Configuration.LazyLoadingEnabled = false;
            }
    et j'ai rajouté ça dans webApiConfig.cs:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                var json = config.Formatters.JsonFormatter;
                json.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
                config.Formatters.Remove(config.Formatters.XmlFormatter);
    Malheureusement je récupère mes appelOffre, l'entreprise qui est liée mais aussi les autres appels d'offres liés à l'entreprise...

    Comment dois-je faire pour récupérer uniquement l'entreprise liée et pas plus ?

    Merci à vous
    Images attachées Images attachées  

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par scude Voir le message
    Malheureusement je récupère mes appelOffre, l'entreprise qui est liée mais aussi les autres appels d'offres liés à l'entreprise...
    Je ne pense pas que ta phrase soit claire

    Citation Envoyé par scude Voir le message
    Comment dois-je faire pour récupérer uniquement l'entreprise liée et pas plus ?
    Ce n'est pas clair. Tu veux récupérer les appels d'offres liés à une entreprise donnée ? Si oui alors dans ce cas il faudra passer en paramètre l'id de l'entreprise concernée et mettre un filtre dans ta requête LINQ en utilisant la clause where.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par défaut
    Désolé si ce n'est pas clair, en fait actuellement je veux récupérer uniquement la liste des appels d'offres avec l'entreprise qui lui est associée.

    Mais en fait je récupère en plus les appel d'offres associés à l'entreprise en question (A l'intérieur de l'objet entreprise).
    J'ai l'impression qu'il fait automatiquement un Include("entreprise.appelOffres") que je ne souhaite pas. Il récupère plus que ce que je lui demande.

    J'espère que c'est plus clair, merci à toi de t'être penché sur mon problème

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par scude Voir le message
    Mais en fait je récupère en plus les appel d'offres associés à l'entreprise en question (A l'intérieur de l'objet entreprise).
    J'ai l'impression qu'il fait automatiquement un Include("entreprise.appelOffres") que je ne souhaite pas. Il récupère plus que ce que je lui demande.
    Ah ok. Tu penses qu'il y a des doublons ? Non non. Vu qu'il y a une relation entre l'entité AppelOffre et Entreprise, le contexte de données en a connaissance et du coup quand tu charges des appels d'offres en plus des entreprises il mets à jour automatiquement les relations des deux côtés. Cela marche pour tous les types de relations sauf pour les relations n-n. C'est comme ça que c'est fait et cela ne veut pas dire qu'on a affaire des instances en double

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    58
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 58
    Par défaut
    Ok et du coup si je ne veux pas de cette relation dans ma chaine json je dois m'y prendre comment ? ça alourdie quand même pas mal la chaine.

    Merci pour ta réponse en tout cas

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par scude Voir le message
    Ok et du coup si je ne veux pas de cette relation dans ma chaine json je dois m'y prendre comment ?
    T'es sûr que la sérialisation ne permet pas d'éviter cela ? Bizarre parce si c'est le cas alors ça ça risque de ne pas le faire.

    Utilise Fiddler pour voir ce qu'il te renvoie comme données Json.

Discussions similaires

  1. Réponses: 8
    Dernier message: 13/08/2013, 10h49
  2. [C#] Récupération des variables system...
    Par smyley dans le forum Windows Forms
    Réponses: 7
    Dernier message: 04/08/2005, 11h39
  3. Réponses: 2
    Dernier message: 20/02/2004, 08h47
  4. Récupération des noms de champs d'une table
    Par Battomura dans le forum SQL
    Réponses: 2
    Dernier message: 24/03/2003, 10h00
  5. Réponses: 13
    Dernier message: 20/03/2003, 08h11

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