Пример #1
0
        // Retourne l'objet a partir de sa primary key
        protected override TObject FindObjectByKeyImpl <TObject>(object key)
        {
            MemberInfo[] members = typeof(TObject).GetMembers();
            var          ret     = (TObject)Activator.CreateInstance(typeof(TObject));

            string           tableName   = ret.TableName;
            DataTableHandler dth         = TableDatasets[tableName];
            string           whereClause = null;

            if (dth.UsesPreCaching)
            {
                DataObject obj = dth.GetPreCachedObject(key);
                if (obj != null)
                {
                    return(obj as TObject);
                }
            }

            // Escape PK value
            key = Escape(key.ToString());

            for (int i = 0; i < members.Length; i++)
            {
                object[] keyAttrib = members[i].GetCustomAttributes(typeof(PrimaryKey), true);
                if (keyAttrib.Length > 0)
                {
                    whereClause = "[" + members[i].Name + "] = '" + key + "'";
                    break;
                }
            }

            if (whereClause == null)
            {
                whereClause = "[" + ret.TableName + "_ID] = '" + key + "'";
            }

            var objs = SelectObjectsImpl <TObject>(whereClause, IsolationLevel.DEFAULT);

            if (objs.Count > 0)
            {
                dth.SetPreCachedObject(key, objs[0]);
                return(objs[0]);
            }

            return(null);
        }
Пример #2
0
        /// <summary>
        /// Selects object from the db and updates or adds entry in the pre-cache
        /// </summary>
        /// <param name="objectType"></param>
        /// <param name="key"></param>
        public bool UpdateInCache <TObject>(object key)
            where TObject : DataObject
        {
            MemberInfo[] members = typeof(TObject).GetMembers();
            var          ret     = (TObject)Activator.CreateInstance(typeof(TObject));

            string           tableName   = ret.TableName;
            DataTableHandler dth         = TableDatasets[tableName];
            string           whereClause = null;

            if (!dth.UsesPreCaching || key == null)
            {
                return(false);
            }

            // Escape PK value
            key = Escape(key.ToString());

            for (int i = 0; i < members.Length; i++)
            {
                object[] keyAttrib = members[i].GetCustomAttributes(typeof(PrimaryKey), true);
                if (keyAttrib.Length > 0)
                {
                    whereClause = "`" + members[i].Name + "` = '" + key + "'";
                    break;
                }
            }

            if (whereClause == null)
            {
                whereClause = "`" + ret.TableName + "_ID` = '" + key + "'";
            }

            var objs = SelectObjects <TObject>(whereClause);

            if (objs.Count > 0)
            {
                dth.SetPreCachedObject(key, objs[0]);
                return(true);
            }

            return(false);
        }