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 :

Question Entity Framework et Silverlight


Sujet :

Entity Framework

  1. #1
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut Question Entity Framework et Silverlight
    Hello,

    je débute sur EF, et je galère bien, car les accès aux données via Silverlight sont asynchrones.

    Pour expliquer mon problème : Je faire un portage d'un appli existante en asp.net VB ver du silverlight 3 ,Entity Framework et WCF Ria services.

    Mon projet est décomposé en plusieurs couches avec des Silverlight Class libraries.

    J'ai découpé En 3 parties la BLL (business logic layer) et mes BOL (Business Object Layer)... et les autres...

    je sais que c'est pas bien, mais ces 2 librairies ont tous les 2 accès à mon modèle qui est côté ASP, via un domain service. (Ria link services)

    La seule bidouille que j'ai trouvé pour gérer mes relations N a N dans mon modèle est de créer une colonne dans la table de relation de la bdd que j'ai ensuite supprimée, afin que Visual studio 2008 puisse générer mes entités de relation.

    Mes questions sont :
    1°) Faut il que ma BLL et ma BOL accède au même Domain contexte pour garantir le même accès aux données ?

    Ce qui veut dire que je dois créer un couche applicative supplémentaire (genre la DAL, data access layer) contenant mon contexte sous forme de singleton ou en statique ? et la BLL et ma BOL accèderait au même contexte (enfin j'espère...)


    2°) Comment effectuer une requête entre 2 entité qui ont une relation N à N ?
    Car quand je fait ma requête sur ma table de relation, ça ne récupère que les valeurs de la table de relation (et non les valeurs des entités associées)

    exemple =>
    AU niveau conceptuel : A(*)---(*)B
    Réellement : A(1)---(*)AB(*)---(1)B

    Je fais une requête sur AB via la requête par défault :
    => monContexte.GetAB()
    => monContexte.AB ne contient pas les données de A et B...


    Comment résoudre cela ?

    merci

  2. #2
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    1) Le contexte EF n'est pas thread sage alors pas de singleton !
    la meilleur approche c'est d'avoir 1 contexte par thread, en WCF je créerai le contexte au début de l'appel WCF et faire le savechanges a la fin de l'appel.

    2) il faut utiliser la méthode d'EF "includes" qui ramène les entités liés.

  3. #3
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut
    Merci !

    OK je vais rajouter les "includes" histoire de récupérer les entités liées.

    Je ne comprend pas trop cette histoire de contexte.

    J'ai bien compris qu'il ne faut pas utiliser le contexte comme singleton...

    Puis-je faire comme cela :

    Mon appli dispose de plusieurs page (Silverlight navigation Application)

    Je mets en tant que membre privé de ma page mon contexte (donc chaque page ou user control aura son propre contexte).

    Comme mon appli est séparée en plusieurs couches :

    Par exemple, si j'ai besoin de faire remplir un gridview dans ma page, je transmets le contexte courant à ma couche BLL (traitement) qui va effectuer les bonnes requêtes et remplir les entités de ce contexte.

    Comme l'appel est asynchrone, quand les traitements sur ce contexte sont terminés, j'avertis ma page, et je travaille uniquement sur les entités de mon contexte que j'aurais chargé par l'intermédiaire de LINQ.

    Est ce une meilleure approche ?

    -----

    UPDATE

    J'ai tester les "includes", alors ça marche, mais uniquement du côté ASP.

    Côté Silverlight :

    voici mes 2 fonctions, l'appel et la réponse :

    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
     
    public void GetTest()
            {
     
    //1) Appel de la fonction côté ASP            _source.MilouContexte.Load(_source.MilouContexte.GetT_CONF_IncludeQuery()).Completed
                    += new System.EventHandler(GetTest_Completed);
            }
     
    //3) Dans cette fonction, je récupère la réponse, et là je n'ai pas les tables requêtées, mais uniquement la table T_CONF
            void GetTest_Completed(object sender, EventArgs e)
            {
                EventArgs ev = new EventArgs();
                if (GetTestEvent_Completed != null)
                    GetTestEvent_Completed(this, ev);
            }
    et côté ASP contenant le modèle EF :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    //2) fichier Domaine Service
    public IQueryable<T_CONF> GetT_CONF_Include()
            {
                var s = this.ObjectContext.T_CONF
                                          .Include("T_LOAD_FOR_CONF")
                                          .Include("T_MEDIA")
                                          .Select(x => x);
    //A ce niveau je récupère mon include fonctionne et je récupère les entités reliées                                   
                return s;
            }
    Côté ASP, je récupère bien les données des autres tables, et sur la réponse en Silverlight, j'ai tout perdu, et je n'ai que les données de ma table principale...


    Je ne vois pas trop comment faire si ce n'est faire des appels séparément pour chacune des tables...

  4. #4
    Membre éprouvé Avatar de anthyme
    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 559
    Points : 1 257
    Points
    1 257
    Par défaut
    Moi je donne la gestion du context à un Ioc (microsoft Unity)

    Pour le problème silverligth il s'agit peut être de la configuration de wcf qui ne sérialise pas les entités liés.

    Sinon pour l'affichage du code sur mon blog j'utilise SyntaxHighlighter

  5. #5
    Membre habitué Avatar de wil4linux
    Inscrit en
    Février 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Février 2005
    Messages : 205
    Points : 174
    Points
    174
    Par défaut
    Merci.

    Bon alors du coup, j'ai bien j'utilise bien une couche DAL qui référence dans une classe mon contexte EF.

    J'instancie un nouveau contexte dans chacun de mes controllers (de ma BLL, qui référencent la DAL) et je requête les tables séparément.

    Car comme cité plus haut, les includes ramènent bien les entités des autres tables dans mon contexte côté ASP, mais "nada" côté Silverlight, d'où les requêtes séparées.

    voilà.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 19/02/2012, 01h58
  2. Silverlight 4 , LINQ et Entity Framework, mode d'emploi ?
    Par yo1-5590 dans le forum Silverlight
    Réponses: 8
    Dernier message: 19/07/2010, 00h06
  3. Architecture : Silverlight - WCF - Entity Framework
    Par darkfrag dans le forum Silverlight
    Réponses: 6
    Dernier message: 02/12/2009, 17h52
  4. ADO.NET Entity Framework, Astoria, Silverlight -> .NET 3.5 ?
    Par rad_hass dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 08/07/2008, 16h01

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