Пример #1
0
        /// <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);
            }
        }
Пример #2
0
        /// <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);
                        }
                    }
                }
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #4
0
        /// <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);
            }
        }
Пример #5
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="destination"></param>
 /// <param name="source"></param>
 public void Map(IDbQueryParameterizable destination, object source)
 {
     Map(destination, source, PropertyDescriptors);
 }