private ITypeHandler ResolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Type parameterClassType, string propertyName, string propertyType, string dbType) { if (parameterClassType == null) { return(typeHandlerFactory.GetUnkownTypeHandler()); } if (typeof(IDictionary).IsAssignableFrom(parameterClassType)) { if ((propertyType == null) || (propertyType.Length == 0)) { return(typeHandlerFactory.GetUnkownTypeHandler()); } try { Type type = TypeUtils.ResolveType(propertyType); return(typeHandlerFactory.GetTypeHandler(type, dbType)); } catch (Exception exception) { throw new ConfigurationException("Error. Could not set TypeHandler. Cause: " + exception.Message, exception); } } if (typeHandlerFactory.GetTypeHandler(parameterClassType, dbType) != null) { return(typeHandlerFactory.GetTypeHandler(parameterClassType, dbType)); } Type memberTypeForGetter = ObjectProbe.GetMemberTypeForGetter(parameterClassType, propertyName); return(typeHandlerFactory.GetTypeHandler(memberTypeForGetter, dbType)); }
/// <summary> /// Get a DataExchange object for the passed in Class /// </summary> /// <param name="clazz">The class to get a DataExchange object for</param> /// <returns>The IDataExchange object</returns> public IDataExchange GetDataExchangeForClass(Type clazz) { IDataExchange dataExchange = null; if (clazz == null) { dataExchange = _complexDataExchange; } else if (typeof(IList).IsAssignableFrom(clazz)) { dataExchange = _listDataExchange; } else if (typeof(IDictionary).IsAssignableFrom(clazz)) { dataExchange = _dictionaryDataExchange; } else if (_typeHandlerFactory.GetTypeHandler(clazz) != null) { dataExchange = _primitiveDataExchange; } else { dataExchange = new DotNetObjectDataExchange(clazz, this); } return(dataExchange); }
/// <summary> /// Get a DataExchange object for the passed in Class /// </summary> /// <param name="clazz">The class to get a DataExchange object for</param> /// <returns>The IDataExchange object</returns> public IDataExchange GetDataExchangeForClass(Type clazz) { IDataExchange dataExchange = null; if (clazz == null) { //为null取ComplexDataExchange对象类 dataExchange = _complexDataExchange; } else if (typeof(IList).IsAssignableFrom(clazz)) { //如果是IList类形式 dataExchange = _listDataExchange; } else if (typeof(IDictionary).IsAssignableFrom(clazz)) { //如果是IDictionary类型 dataExchange = _dictionaryDataExchange; } else if (_typeHandlerFactory.GetTypeHandler(clazz) != null) { //去TypeHandlerFactory工厂中去取类对象 dataExchange = _primitiveDataExchange; } else { //最终默认的数据交换类型 dataExchange = new DotNetObjectDataExchange(clazz, this); } return(dataExchange); }
private void BuildDbParameters(AbstractRequestContext reqConetxt) { if (reqConetxt.CommandType == CommandType.StoredProcedure) { foreach (var sqlParameter in reqConetxt.Parameters.Values) { var sourceParam = _dbProviderFactory.CreateParameter(); sourceParam.ParameterName = sqlParameter.Name; sourceParam.Value = sqlParameter.Value; ITypeHandler typeHandler = (reqConetxt.ParameterMap?.GetParameter(sqlParameter.Name)?.Handler ?? sqlParameter.TypeHandler) ?? (sqlParameter.ParameterType != null ? _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType) : null); typeHandler?.SetParameter(sourceParam, sqlParameter.Value); sqlParameter.SourceParameter = sourceParam; InitSourceDbParameter(sourceParam, sqlParameter); } } else { reqConetxt.RealSql = _sqlParamAnalyzer.Replace(reqConetxt.RealSql, (paramName, nameWithPrefix) => { if (!reqConetxt.Parameters.TryGetValue(paramName, out var sqlParameter)) { return(nameWithPrefix); } ITypeHandler typeHandler = (reqConetxt.ParameterMap?.GetParameter(paramName)?.Handler ?? sqlParameter.TypeHandler) ?? _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType); var sourceParam = _dbProviderFactory.CreateParameter(); sourceParam.ParameterName = sqlParameter.Name; typeHandler.SetParameter(sourceParam, sqlParameter.Value); sqlParameter.SourceParameter = sourceParam; InitSourceDbParameter(sourceParam, sqlParameter); if (sqlParameter.Name != paramName) { return ($"{reqConetxt.ExecutionContext.SmartSqlConfig.Database.DbProvider.ParameterPrefix}{sqlParameter.Name}"); } return(nameWithPrefix); }); } }
/// <summary> /// Resolve TypeHandler /// </summary> /// <param name="parameterClassType"></param> /// <param name="propertyName"></param> /// <param name="propertyType"></param> /// <param name="dbType"></param> /// <param name="typeHandlerFactory"></param> /// <returns></returns> private ITypeHandler ResolveTypeHandler(TypeHandlerFactory typeHandlerFactory, Type parameterClassType, string propertyName, string propertyType, string dbType) { ITypeHandler handler = null; if (parameterClassType == null) { handler = typeHandlerFactory.GetUnkownTypeHandler(); } else if (typeof(IDictionary).IsAssignableFrom(parameterClassType)) { if (propertyType == null || propertyType.Length == 0) { handler = typeHandlerFactory.GetUnkownTypeHandler(); } else { try { Type typeClass = TypeUtils.ResolveType(propertyType); handler = typeHandlerFactory.GetTypeHandler(typeClass, dbType); } catch (Exception e) { throw new ConfigurationException("Error. Could not set TypeHandler. Cause: " + e.Message, e); } } } else if (typeHandlerFactory.GetTypeHandler(parameterClassType, dbType) != null) { handler = typeHandlerFactory.GetTypeHandler(parameterClassType, dbType); } else { Type typeClass = ObjectProbe.GetMemberTypeForGetter(parameterClassType, propertyName); handler = typeHandlerFactory.GetTypeHandler(typeClass, dbType); } return(handler); }
private void BuildDbParameters(AbstractRequestContext reqConetxt) { var dbParameterNames = _sqlParamAnalyzer.Analyse(reqConetxt.RealSql); if (reqConetxt.CommandType == CommandType.StoredProcedure) { foreach (var sqlParameter in reqConetxt.Parameters.Values) { var sourceParam = _dbProviderFactory.CreateParameter(); sourceParam.ParameterName = sqlParameter.Name; sourceParam.Value = sqlParameter.Value; sqlParameter.SourceParameter = sourceParam; InitSourceDbParameter(sourceParam, sqlParameter); } } else { foreach (var paramName in dbParameterNames) { var parameter = reqConetxt.ParameterMap?.GetParameter(paramName); var propertyName = paramName; ITypeHandler typeHandler = null; if (parameter != null) { propertyName = parameter.Property; typeHandler = parameter.Handler; } if (!reqConetxt.Parameters.TryGetValue(propertyName, out var sqlParameter)) { continue; } var sourceParam = _dbProviderFactory.CreateParameter(); sourceParam.ParameterName = paramName; if (typeHandler == null) { typeHandler = sqlParameter.TypeHandler ?? _typeHandlerFactory.GetTypeHandler(sqlParameter.ParameterType); } typeHandler.SetParameter(sourceParam, sqlParameter.Value); sqlParameter.SourceParameter = sourceParam; InitSourceDbParameter(sourceParam, sqlParameter); } } }
/// <summary> /// Initialize a the result property /// for AutoMapper /// </summary> /// <param name="setAccessor">An <see cref="ISetAccessor"/>.</param> /// <param name="typeHandlerFactory"></param> internal void Initialize(TypeHandlerFactory typeHandlerFactory, ISetAccessor setAccessor) { _setAccessor = setAccessor; _typeHandler = typeHandlerFactory.GetTypeHandler(setAccessor.MemberType); }
public void GetEnumTypeHandler() { var typeHandler = _typeHandlerFactory.GetTypeHandler(_enumType); Assert.Equal(typeof(EnumTypeHandler <NumericalEnum>), typeHandler.GetType()); }
/// <summary> /// Initialize a the result property /// for AutoMapper /// </summary> /// <param name="setAccessor">An <see cref="ISetAccessor"/>.</param> /// <param name="typeHandlerFactory"></param> internal void Initialize(TypeHandlerFactory typeHandlerFactory, ISetAccessor setAccessor ) { _setAccessor = setAccessor; _typeHandler = typeHandlerFactory.GetTypeHandler(setAccessor.MemberType); }
public void TestEnumType() { var typeHandler = typeHandlerFactory.GetTypeHandler(enumType); Assert.NotNull(typeHandler); }