/// <summary>
        /// Get the list of attributs for each propertie of the class
        /// </summary>
        /// <returns></returns>
        private List <FieldSQLAttribute> GetListOfAttributsForEachFieldSQL()
        {
            List <FieldSQLAttribute> lstAttFieldSQL = new List <FieldSQLAttribute>();

            Type type = typeof(T);

            PropertyInfo[] lstPropertyInfo = type.GetProperties();

            foreach (PropertyInfo pi in lstPropertyInfo)
            {
                FieldSQLAttribute attFielSQL = GetFieldSQLAttribute(pi);

                lstAttFieldSQL.Add(attFielSQL);
            }

            lstAttFieldSQL.Sort(delegate(FieldSQLAttribute x, FieldSQLAttribute y) { return(x.OrdreSQL.CompareTo(y.OrdreSQL)); });

            return(lstAttFieldSQL);
        }
        /// <summary>
        /// Create the parameters SQL for each properties of T
        /// </summary>
        /// <param name="parameters"></param>
        /// <param name="objet"></param>
        /// <param name="typereq"></param>
        private void CreateParameterSQL(DynamicParameters parameters, T objet, TypeReq typereq)
        {
            bool createParam = false;

            foreach (PropertyInfo pi in objet.GetType().GetProperties())
            {
                createParam = false;

                FieldSQLAttribute attrs = RequestFactory.GetFieldSQLAttribute(pi);

                if ((attrs != null) && (!attrs.ExcluSQL) && (!string.IsNullOrEmpty(attrs.NameSQL)))
                {
                    if ((!attrs.Identity) && ((typereq == TypeReq.Insert) || (typereq == TypeReq.Update)))
                    {
                        createParam = true;
                    }

                    if ((attrs.PK) && (typereq == TypeReq.OnlyPK))
                    {
                        createParam = true;
                    }

                    if (createParam)
                    {
                        object value = null;

                        try
                        {
                            value = pi.GetValue(objet, null);
                        }
                        catch
                        {
                            //no break
                        }

                        parameters.Add("@" + attrs.NameSQL.ToLower(), value, GetTypeSQL(attrs.TypeSQL), ParameterDirection.Input);
                    }
                }
            }
        }
        /// <summary>
        /// Get the FieldSQLAttribute object for one PropertyInfo
        /// </summary>
        /// <param name="propertyInfo"></param>
        /// <returns></returns>
        public FieldSQLAttribute GetFieldSQLAttribute(PropertyInfo propertyInfo)
        {
            var listOfCustomAttributes = propertyInfo.GetCustomAttributes <FieldSQLAttribute>();

            FieldSQLAttribute attFielSQL = new FieldSQLAttribute();

            foreach (FieldSQLAttribute fieldAtt in listOfCustomAttributes)
            {
                attFielSQL.ExcluSQL     = fieldAtt.ExcluSQL;
                attFielSQL.PK           = fieldAtt.PK;
                attFielSQL.FK           = fieldAtt.FK;
                attFielSQL.IX           = fieldAtt.IX;
                attFielSQL.Identity     = fieldAtt.Identity;
                attFielSQL.Nullable     = fieldAtt.Nullable;
                attFielSQL.NameSQL      = fieldAtt.NameSQL;
                attFielSQL.TypeSQL      = fieldAtt.TypeSQL;
                attFielSQL.LengthSQL    = fieldAtt.LengthSQL;
                attFielSQL.PrecisionSQL = fieldAtt.PrecisionSQL;
                attFielSQL.OrdreSQL     = fieldAtt.OrdreSQL;
            }

            return(attFielSQL);
        }