예제 #1
0
        /// <summary>
        /// Cette fonction permet de récupérer les informations d'acces à la base de données tel que 
        /// préciser dans les attributs d'une classe Persistable.
        /// </summary>
        /// <param name="persistableObjectType">Type dont on souhaite récupérer les infos</param>
        /// <param name="pdsa">contient l'instance de l'attribut PersistsDataSource de la classe</param>
        /// <param name="pcs">contient l'instance de l'attribut PersistsConnexionString de la classe</param>
        private void GetDatabaseInformation(Type persistableObjectType,out PersistDataSourceAttribute pdsa, out PersistConnectionStringAttribute pcs)
        {
            pdsa=null;	// contient les requetes utile pour l'acces au données
            pcs=null;	// contient l'attribut de la chaine de connexion

            #region Gestion du cache pour PCS et PDSA
            PersistCacheItem ci=null;	// pour stocker l'item du cache si besoin
            if (TypeInfoCacheEnable)
            {
                if (_slTypeInfoCache.Contains(persistableObjectType.AssemblyQualifiedName))
                {
                    // les informations pour ce type de données sont déjà présentes dans le cache.
                    ci=(PersistCacheItem)_slTypeInfoCache[persistableObjectType.AssemblyQualifiedName];
                    // si pdsa & pcs sont différents de null, on renvoi directement ces valeurs
                    if (ci.pcs!=null && ci.pdsa!=null)
                    {
                        pdsa=ci.pdsa;
                        pcs=ci.pcs;
                        return;
                    }
                }
                else
                {
                    // le cache ne contient les données pour ce type => on ajout un nouveau persistCacheItem dans le cache
                    ci=new PersistCacheItem();
                    _slTypeInfoCache.Add(persistableObjectType.AssemblyQualifiedName,ci);
                }
            }
            #endregion

            MemberInfo objInfo=persistableObjectType;
            /* recherche des informations de persistance lié à la classe : recherche de l'attribut [PersistDataSource] */
            object[] tabAttrs=objInfo.GetCustomAttributes(true);
            foreach(object obj in tabAttrs)
            {
                if (obj is PersistDALAttribute)
                {
                    if (pdsa==null)
                        pdsa=obj as PersistDataSourceAttribute; // si obj est un [PersistDataSource] on stocke sa référence
                    if (pcs==null)
                        pcs=obj as PersistConnectionStringAttribute;	// on stocke la ref a l'attribut si c'est une [PersistConnectionString]
                    // pour recupérer la chaine de connection a utiliser
                }
            }
            if (pdsa==null)	// si pas de [PersistDataSource] sur la classe ==> Erreur : pas persistable
                throw new PersistException("Not a persistable class, or class without PersistDataSourceAttribute inherited attribute");
            if (pcs==null)	// si pas de [PersistConnectionString] sur la classe ==> Erreur pas d'info de connexion à la base
                throw new PersistException("No ConnectionString information for accessing DataBase");

            #region Gestion du cache pour PCS et PDSA
            // on met a jour les info du CacheItem et on l'ajoute dans le cache si cache activé
            if (ci!=null)
            {
                ci.pdsa=pdsa;
                ci.pcs=pcs;
            }
            #endregion
        }
예제 #2
0
        /// <summary>
        /// Cette fonction permet de récupérer les informations d'acces à la base de données tel que
        /// préciser dans les attributs d'une classe Persistable.
        /// </summary>
        /// <param name="persistableObjectType">Type dont on souhaite récupérer les infos</param>
        /// <param name="pdsa">contient l'instance de l'attribut PersistsDataSource de la classe</param>
        /// <param name="pcs">contient l'instance de l'attribut PersistsConnexionString de la classe</param>
        private void GetDatabaseInformation(Type persistableObjectType, out PersistDataSourceAttribute pdsa, out PersistConnectionStringAttribute pcs)
        {
            pdsa = null;                // contient les requetes utile pour l'acces au données
            pcs  = null;                // contient l'attribut de la chaine de connexion


            #region Gestion du cache pour PCS et PDSA
            PersistCacheItem ci = null;                 // pour stocker l'item du cache si besoin
            if (TypeInfoCacheEnable)
            {
                if (_slTypeInfoCache.Contains(persistableObjectType.AssemblyQualifiedName))
                {
                    // les informations pour ce type de données sont déjà présentes dans le cache.
                    ci = (PersistCacheItem)_slTypeInfoCache[persistableObjectType.AssemblyQualifiedName];
                    // si pdsa & pcs sont différents de null, on renvoi directement ces valeurs
                    if (ci.pcs != null && ci.pdsa != null)
                    {
                        pdsa = ci.pdsa;
                        pcs  = ci.pcs;
                        return;
                    }
                }
                else
                {
                    // le cache ne contient les données pour ce type => on ajout un nouveau persistCacheItem dans le cache
                    ci = new PersistCacheItem();
                    _slTypeInfoCache.Add(persistableObjectType.AssemblyQualifiedName, ci);
                }
            }
            #endregion



            MemberInfo objInfo = persistableObjectType;
            /* recherche des informations de persistance lié à la classe : recherche de l'attribut [PersistDataSource] */
            object[] tabAttrs = objInfo.GetCustomAttributes(true);
            foreach (object obj in tabAttrs)
            {
                if (obj is PersistDALAttribute)
                {
                    if (pdsa == null)
                    {
                        pdsa = obj as PersistDataSourceAttribute;                       // si obj est un [PersistDataSource] on stocke sa référence
                    }
                    if (pcs == null)
                    {
                        pcs = obj as PersistConnectionStringAttribute;                          // on stocke la ref a l'attribut si c'est une [PersistConnectionString]
                    }
                    // pour recupérer la chaine de connection a utiliser
                }
            }
            if (pdsa == null)           // si pas de [PersistDataSource] sur la classe ==> Erreur : pas persistable
            {
                throw new PersistException("Not a persistable class, or class without PersistDataSourceAttribute inherited attribute");
            }
            if (pcs == null)            // si pas de [PersistConnectionString] sur la classe ==> Erreur pas d'info de connexion à la base
            {
                throw new PersistException("No ConnectionString information for accessing DataBase");
            }

            #region Gestion du cache pour PCS et PDSA
            // on met a jour les info du CacheItem et on l'ajoute dans le cache si cache activé
            if (ci != null)
            {
                ci.pdsa = pdsa;
                ci.pcs  = pcs;
            }
            #endregion
        }