Ejemplo n.º 1
0
 private static void SetQueryCache(SqlMapper.Identity key, SqlMapper.CacheInfo value)
 {
     if (Interlocked.Increment(ref _collect) == COLLECT_PER_ITEMS)
     {
         CollectCacheGarbage();
     }
     lock (_queryCacheSync)
     {
         _queryCache[key] = value;
     }
 }
Ejemplo n.º 2
0
        private static Boolean TryGetQueryCache(SqlMapper.Identity key, out SqlMapper.CacheInfo value)
        {
            Boolean found;

            lock (_queryCacheSync)
            {
                found = _queryCache.TryGetValue(key, out value);
            }
            if (found)
            {
                value.RecordHit();
            }
            else
            {
                value = null;
            }
            return(found);
        }
Ejemplo n.º 3
0
 private static SqlMapper.CacheInfo GetCacheInfo(SqlMapper.Identity identity)
 {
     SqlMapper.CacheInfo info;
     if (!TryGetQueryCache(identity, out info))
     {
         info = new SqlMapper.CacheInfo();
         if (identity.parametersType != null)
         {
             if (typeof(SqlMapper.IDynamicParameters).IsAssignableFrom(identity.parametersType))
             {
                 info.ParamReader = (cmd, obj) => { (obj as SqlMapper.IDynamicParameters).AddParameters(cmd, identity); }
             }
             ;
             else if (typeof(IEnumerable <KeyValuePair <String, Object> >).IsAssignableFrom(identity.parametersType))
             {
                 info.ParamReader = (cmd, obj) => { (new DynamicParameters(obj) as SqlMapper.IDynamicParameters).AddParameters(cmd, identity); }
             }
             ;
             else if (identity.parametersType.IsValueType && !identity.parametersType.IsPrimitive)
             {
                 info.ParamReader = (cmd, obj) =>
                 {
                     foreach (PropertyInfo pi in obj.GetType().GetProperties())
                     {
                         IDbDataParameter param = cmd.CreateParameter();
                         param.ParameterName = pi.Name;
                         param.Value         = pi.GetValue(obj, null);
                         cmd.Parameters.Add(param);
                     }
                 }
             }
             ;
             else
             {
                 info.ParamReader = SqlMapper.CreateParamInfoGenerator(identity, false);
             }
         }
         SetQueryCache(identity, info);
     }
     return(info);
 }