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 :

Partage de "ObjectContext" dans la couche BLL


Sujet :

Entity Framework

  1. #1
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut Partage de "ObjectContext" dans la couche BLL
    Hello tout le monde,

    Quelle est la meilleure solution pour partager mon objet "ObjectContext" entre mes différentes classes BLL.

    Je ne souhaite pas créer une propriété statique, car c'est pour une application ASP.NET et ce n'est pas du tout recommandé.

    Merci d'avance pour votre aide.

  2. #2
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    Singleton ou IoC me viennent à l'esprit.
    Tu dois vraiment avoir ton DC dans ta BLL? Généralement, je ne m'occupe de ça que dans ma DLL.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

  3. #3
    Membre averti Avatar de soad
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    520
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Suisse

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Février 2004
    Messages : 520
    Points : 439
    Points
    439
    Par défaut
    Ma classe "ObjectContext" est dans ma couche DAL mais j'y accède depuis la couche BLL pour manipuler mes données.

    Ce que j'ai fait c'est une classe factory "ObjectContextFactory" que se situe dans ma couche DAL et qui me permet de créer et de stocker un objet "ObjectContext" pour un Thread donné :

    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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    namespace DAL {
        public class ObjectContextFactory {
     
            /// <summary>
            /// Clé pour sauvegarder le "ObjectContext"
            /// </summary>
            public const string CONTEXT_KEY_NAME = "ObjectContextSingleton";
     
     
            /// <summary>
            /// Récupérer le "ObjectContext" du Thread en cours
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <returns></returns>
            public static T GetCurrentContext<T>() where T : new() {
     
                // ObjectContext
                T objectContext;
     
                // Si dans un context web
                if(HttpContext.Current != null) {
                    Page currentPage = (Page) HttpContext.Current.Handler; 
                    if(currentPage == null) throw new NullReferenceException("Page is null");
                    if(currentPage.Items[CONTEXT_KEY_NAME] == null) currentPage.Items[CONTEXT_KEY_NAME] = new T();
                    objectContext = (T) currentPage.Items[CONTEXT_KEY_NAME];
                }
     
                // Sinon
                else {
                    objectContext = (T) CallContext.GetData(CONTEXT_KEY_NAME);
                    if(objectContext == null) {
                        objectContext = new T();
                        CallContext.SetData(CONTEXT_KEY_NAME, objectContext);
                    }
                }
     
                // Retourne le "ObjectContext"
                return objectContext;
            }
        }
    }
    Qu'en pensez-vous ? Est-ce une bonne façon de faire ?

  4. #4
    Membre expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Points : 3 568
    Points
    3 568
    Par défaut
    J'imagine que tu stockes l'ObjectContext dans le Handler pour le garder entre les requêtes. Pour las appli ASP.NET il vaut mieux un ObjectContext par requête dans la plupart des cas. Tu peux le stocker alors dans HTTPContext.Items. L'ObjectContext ne doit pas avoir une durée de vie trop longue, et ne prend pas beaucoup de ressources lors de sa création.
    Microsoft MVP : Windows Platform

    MCPD - Windows Phone Developer
    MCPD - Windows Developer 4

    http://www.guruumeditation.net

    “If debugging is the process of removing bugs, then programming must be the process of putting them in.”
    (Edsger W. Dijkstra)

Discussions similaires

  1. [vbnet 1.1]Inserer deux simple quote sans texte dans une db
    Par ChristopheOce dans le forum Windows Forms
    Réponses: 8
    Dernier message: 15/03/2007, 08h51

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