private static void SetQueryCache(SqlMapper.Identity key, SqlMapper.CacheInfo value) { if (Interlocked.Increment(ref _collect) == COLLECT_PER_ITEMS) { CollectCacheGarbage(); } lock (_queryCacheSync) { _queryCache[key] = value; } }
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); }
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); }