Architecture

Résolu
Djzlouk Messages postés 70 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 20 janvier 2011 - 17 févr. 2009 à 16:22
titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 - 18 févr. 2009 à 08:52
Hello les codeurs !

Voila, après quelques soucis, je reprend mon projet tranquillement et je voudrais découper ma solution en plusieurs projets logique.

1) La base de données + Classe LinqToSQL
2) La couche Metier, qui va etre tous les éléments logiques de ma classe. (qui va faire appel à la base)
3) La couche Présentation qui va etre simplement les pages qui vont faire appel aux autres couches.

J'ai commencé à monter cette architecture, et tout fonctionne à merveille. ou presque !
J'ai 2 soucis :

1) Dans mon projet Base de donnée j'ai une classe : ConnBDD qui me permet de recuperer un objet SqlConnection qui va etre utile pour la couche metier. (comme cela)
<hr size="2" width="100%" />using System.Configuration;
using System.Data.SqlClient;

namespace BDD
{
    /// <summary>
    /// Connexion à la base de donnée
    /// </summary>
    public class ConnBDD
    {
        /// <summary>
        /// SqlConnection de la chaine de connexion à la base de donnée
        /// </summary>
        /// <returns></returns>
        public static SqlConnection MyConn =
            new SqlConnection(ConfigurationManager.ConnectionStrings["ASPNETDBConnectionString"].ConnectionString);
    }
}
<hr size="2" width="100%" />Mais quand j'appel cette classe depuis ma couche metier, mon attibu MyConn est null. Vous savez pourquoi ?

2) Dans ma couche présentation j'utilise les éléments de VS2008 pour se connecter à l'application directement (asp:Login...) mais je n'ai pas mis de lien avec ma couche BDD, donc il cree à chaque run une base ASPNETDB.MDF dans la couche présentation. Moi, ce que j'aimerais c'est configurer le pointage vers la base qui se trouve dans l'autre projet.

Si vous avez des idées, n'hésitez pas !

Merci

5 réponses

titeoe Messages postés 433 Date d'inscription samedi 26 avril 2003 Statut Membre Dernière intervention 4 décembre 2009 1
18 févr. 2009 à 08:52
Bonjour,

Afin de ne pas trop te prendre la tête avec des connections à la base de données, je te conseille d'utiliser le "Data Application Block" de l'excellent Framework open source "MS Enterpise Library 4.0". Le principe est simple :
Tu déclare dans ton web.config une chaine de connection nommée vers ta base et ensuite dans ta couche de DATAS tu utilise une DataBaseFactory pour créer ta connection.

> du coup, plus de problèmes.


Ensuite pour ton point concernant l'utilisation des controles de sécurité de ASP.Net, il faut que tu mette en place un membership provider. Tu peux configurer le provider pour qu'il attaque ta base de données de ton projet. Tu trouveras un excellent article de scott mitchell sur le sujet à cette adresse :
http://aspnet.4guysfromrolla.com/articles/120705-1.aspx

Autre remarque : il n'est pas nécessaire de redonner un fichier web.config dans la couche de DATAS puisque au runtime, ta couche de datas utilisera le web.config du contexte courant, cad le fichier web.config de ta couche WEB (je pense que c'est de la que viennent tes problemes de référence nulle).

Happy coding
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 50
17 févr. 2009 à 17:47
Salut

Pour ton 1er soucis, je te conseille plutôt de passer par une classe Singleton (enfin pas exactement singleton, mais presque), ce sera beaucoup plus pratique pour la gestion d'erreurs, des accès etc...
public class ConnBDD
{
    private static SQLConnection myConn = null;
   
    public staticSQLConnection MyConn
    {
        get
        {            if (myConn null) myConn newSqlConnection(ConfigurationManager.ConnectionStrings["ASPNETDBConnectionString"].ConnectionString);
            return myConn;
        }
    }
}
Comme je le disais, c'est pas tout à fait un singleton puisque myConn est de type SQLConnection et non ConnBDD, mais le principe est relativement le même.

Théoriquement, vu la façons dont j'ai nommé les propriétés / attributs, en remplaçant ton code par ça tu n'as rien à changer nulle-part.
Et grâce à ça, tu peux par exemple faire un try/catch autour de la création de ta connexion, tu peux faire des conditions, etc. (Et si tu veux transmettre des arguments, fait une fonction à la place de la propriété.

Quant à ton 2eme problème, tu peux pas simplement indiquer le chemin en absolu ? (enfin je dis ça, tu as déjà dû essayer, mais j'ai pas d'autre idée là)

Krimog :
while (!succeed = try()) ;
0
Djzlouk Messages postés 70 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 20 janvier 2011
17 févr. 2009 à 18:44
Merci Krimog.

Je vais effectivement faire comme ca pour la 1ere question. Cela sera plus propre dans la maniere de gérer ma connexion. (Je test ce soir et vous tien informé si ca marche pas :p)

Pour la 2eme question, c'est un peu plus complexe. Je veix bien mettre mon chemin en Absolu, mais ou ?

Rappel de mon arborecence :

+BDD
 | - App_Data
    | - ASPNETDB.MDF
 | - web.config
    | - ConnectionString ...AttachDbFilename=|DataDirectory|\ASPNETDB.MDF
+METIER
+WEB
 | - web.config

Donc, Comment mettre dans le 2eme Web.config (partie WEB) la liaison avec la vrai base de donnée qui est dans le projet BDD ? (Mettre une connetionString avec l'adresse en absolu  ? faire reference à l'autre connetionString ?)

Bref, j'ai toujours quelques questions, mais vu ta signature, je suis sur que ca va marcher bientot :)
0
Djzlouk Messages postés 70 Date d'inscription jeudi 26 juillet 2007 Statut Membre Dernière intervention 20 janvier 2011
17 févr. 2009 à 19:13
C'est deja moi :p

Pour la 1ere question, ce n'est pas tout à fait résolu. J'ai écris ca pour que ca fonctionne (et ca marche) mais c'est pas du tout propre de l'ecrire à la main ! Parce qu'en effet, j'ai une execption : 'La référence d'objet n'est pas définie à une instance d'un objet.'

La code (qui marche mais pas propre) :
 
<hr />
public

static
SqlConnection MyConn{

   get{

      if (myConn ==
null){

         try{
            myConn =
new
SqlConnection(
ConfigurationManager.ConnectionStrings[
"ASPNETDBConnectionString"].ConnectionString);
         }

         catch (
Exception){

            const
string conString =
"Data Source=.\\SQLEXPRESS;AttachDbFilename=|DataDirectory|\\ASPNETDB.MDF;Integrated Security=True;User Instance=True; Language=French; Pooling=true; Max Pool Size=100";
            myConn =
new
SqlConnection(conString);
         }
      }

      return myConn;
   }
}
<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
RougailSaucisse Messages postés 118 Date d'inscription lundi 16 février 2009 Statut Membre Dernière intervention 6 décembre 2010 1
17 févr. 2009 à 20:01
es-tu certain d'avoir mis ta connection string dans la bonne section et avec le bon nom dans ton web.config?
car si tu erreur de type reference d'objet n'est pas définie a une isntance d'un objet sur ta ligne "myConn =
newSqlConnection(
ConfigurationManager.ConnectionStrings[
"ASPNETDBConnectionString"].ConnectionString);", je ne vois pas ce que ca pourrait etre d'autre.

donc vérifie que tu as bien mis ta chaine de connexion dans
<connectionStrings> avec ASPNETDBConnectionString" ..... /></connectionStrings>
0