/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="source"></param> /// <param name="propertyDescriptor"></param> protected void MapValueTypeData(IDbQueryParameterizable destination, object source, DbQueryPropertyDescriptor propertyDescriptor) { var _parameters = CreateParameters(propertyDescriptor); foreach (var _parameter in _parameters) { if (_parameter.Direction.Equals(ParameterDirection.Input) || _parameter.Direction.Equals(ParameterDirection.InputOutput)) { _parameter.Value = propertyDescriptor.GetValue(source); if (ObjectUtils.IsNullOrDefault(_parameter.Value)) { if (!IsInChild) { if (!propertyDescriptor.IsNullable && null != propertyDescriptor.DefaultValue) { _parameter.Value = propertyDescriptor.DefaultValue; destination.AddParameter(_parameter); } } continue; } } destination.AddParameter(_parameter); } }
/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="source"></param> /// <param name="propertyDescriptors"></param> protected virtual void Map(IDbQueryParameterizable destination, object source, DbQueryPropertyDescriptors propertyDescriptors) { foreach (var _propertyDescriptor in propertyDescriptors) { if (!IsExceptionalType(_propertyDescriptor)) { MapValueTypeData(destination, source, _propertyDescriptor); } else { if (_propertyDescriptor.DbType.Equals(SqlDbType.Xml)) { MapXmlTypeData(destination, source, _propertyDescriptor); } else { var _source = _propertyDescriptor.GetValue(source) ?? ObjectUtils.CreateInstanceOf(_propertyDescriptor.RetrunType); if (_source is IValueSerializable) { var _parameters = CreateParameters(_propertyDescriptor); foreach (var _parameter in _parameters) { if (_parameter.Direction.Equals(ParameterDirection.Input) || _parameter.Direction.Equals(ParameterDirection.InputOutput)) { var _serializer = (_source as IValueSerializable); var _serialized = _serializer.Serialize(); if (!ObjectUtils.IsNullOrDefault(_serialized)) { _parameter.Value = _serialized; destination.AddParameter(_parameter); } continue; } destination.AddParameter(_parameter); } } else { MapReferenceTypeData(destination, _source, _propertyDescriptor); } } } } }
/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="source"></param> /// <param name="propertyDescriptor"></param> protected void MapReferenceTypeData(IDbQueryParameterizable destination, object source, DbQueryPropertyDescriptor propertyDescriptor) { var _sourceDescriptor = OperatingSession.OperationContext.DescriptorManager.GetDescriptor(source); var _ignoreProperties = propertyDescriptor.DeclaringDescriptor.IgnorePropertyDescriptors.GetDescriptors(propertyDescriptor); var _sourceProperties = _sourceDescriptor.PropertyDescriptors.GetDescriptors(propertyDescriptor.QueryAction, _ignoreProperties); if (!_sourceProperties.IsEmpty) { var _parameterMapper = OperatingSession.CreateDbQueryParameterMapper(_sourceProperties, true); _parameterMapper.Map(destination, source); } }
/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="source"></param> /// <param name="propertyDescriptor"></param> protected void MapXmlTypeData(IDbQueryParameterizable destination, object source, DbQueryPropertyDescriptor propertyDescriptor) { var _parameters = CreateParameters(propertyDescriptor); var _propertyValue = propertyDescriptor.GetValue(source); foreach (var _parameter in _parameters) { if (_parameter.Direction.Equals(ParameterDirection.Input) || _parameter.Direction.Equals(ParameterDirection.InputOutput)) { if (null != _propertyValue) { var _serializer = new DbQueryXmlSerializer(OperatingSession.OperationContext); var _descriptor = OperatingSession.OperationContext.DescriptorManager.GetDescriptor(_propertyValue); var _document = _serializer.Serialize(_descriptor.PropertyDescriptors, _propertyValue); if (_document.HasChildNodes) { _parameter.Value = _typeConverter.Convert(typeof(SqlXml), _document); destination.AddParameter(_parameter); } continue; } } destination.AddParameter(_parameter); } if (propertyDescriptor.IsNullable) { var _source = _propertyValue ?? ObjectUtils.CreateInstanceOf(propertyDescriptor.RetrunType); MapReferenceTypeData(destination, _source, propertyDescriptor); } }
/// <summary> /// /// </summary> /// <param name="destination"></param> /// <param name="source"></param> public void Map(IDbQueryParameterizable destination, object source) { Map(destination, source, PropertyDescriptors); }