Précédent   Forum du club des développeurs et IT Pro > Dotnet > Accès aux données > Entity Framework
Entity Framework Forum d'entraide sur le développement avec le modèle d'accès aux données Entity Framework de Microsoft.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 04/09/2012, 17h39   #1
soad
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 512
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2004
Messages : 512
Points : 339
Points : 339
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.
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 08h55   #2
GuruuMeditation
Expert Confirmé
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
.Net Architect
Inscription : octobre 2010
Messages : 1 351
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 38
Localisation : Belgique

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

Informations forums :
Inscription : octobre 2010
Messages : 1 351
Points : 2 867
Points : 2 867
Envoyer un message via MSN à GuruuMeditation
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 : Visual C#

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)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/09/2012, 17h07   #3
soad
Membre éclairé
 
Avatar de soad
 
Inscription : février 2004
Messages : 512
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : février 2004
Messages : 512
Points : 339
Points : 339
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 :
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 ?
soad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2012, 09h03   #4
GuruuMeditation
Expert Confirmé
 
Avatar de GuruuMeditation
 
Homme Olivier Matis
.Net Architect
Inscription : octobre 2010
Messages : 1 351
Détails du profil
Informations personnelles :
Nom : Homme Olivier Matis
Âge : 38
Localisation : Belgique

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

Informations forums :
Inscription : octobre 2010
Messages : 1 351
Points : 2 867
Points : 2 867
Envoyer un message via MSN à GuruuMeditation
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 : Visual C#

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)
GuruuMeditation est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h17.


 
 
 
 
Partenaires

Hébergement Web