Author: gbayon
Date: Sat Apr 1 10:53:15 2006
New Revision: 390726
URL: http://svn.apache.org/viewcvs?rev=390726&view=rev
Log:
- Finished implementing IDataExchange (SetData support)
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ParameterMapping/ParameterMap.cs
Sat Apr 1 10:53:15 2006
@@ -2,7 +2,7 @@
#region Apache Notice
/*****************************************************************************
* $Header: $
- * $Revision: 390227 $
+ * $Revision$
* $Date$
*
* iBATIS.NET Data Mapper
@@ -294,6 +294,16 @@
typeHandler.SetParameter(dataParameter, value,
mapping.DbType);
}
+ /// <summary>
+ /// Set output parameter value.
+ /// </summary>
+ /// <param name="mapping"></param>
+ /// <param name="dataBaseValue"></param>
+ /// <param name="target"></param>
+ public void SetOutputParameter(ref object target,
ParameterProperty mapping, object dataBaseValue )
+ {
+ _dataExchange.SetData(ref target, mapping,
dataBaseValue);
+ }
#region Configuration
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/ResultMapping/ResultMap.cs
Sat Apr 1 10:53:15 2006
@@ -35,6 +35,7 @@
using IBatisNet.Common.Utilities.Objects;
using IBatisNet.Common.Utilities.TypesResolver;
using IBatisNet.DataMapper.Configuration.Serializers;
+using IBatisNet.DataMapper.DataExchange;
using IBatisNet.DataMapper.Scope;
#endregion
@@ -63,7 +64,6 @@
/// </summary>
private const string XML_SUBMAP = "subMap";
- private IFactory _objectFactory = null;
#region Fields
[NonSerialized]
@@ -81,6 +81,12 @@
private Discriminator _discriminator = null;
[NonSerialized]
private string _sqlMapNameSpace = string.Empty;
+ [NonSerialized]
+ private IFactory _objectFactory = null;
+ [NonSerialized]
+ private DataExchangeFactory _dataExchangeFactory = null;
+ [NonSerialized]
+ private IDataExchange _dataExchange = null;
#endregion
#region Properties
@@ -91,14 +97,8 @@
[XmlIgnore]
public string SqlMapNameSpace
{
- get
- {
- return _sqlMapNameSpace;
- }
- set
- {
- _sqlMapNameSpace = value;
- }
+ get { return _sqlMapNameSpace; }
+ set { _sqlMapNameSpace = value; }
}
/// <summary>
@@ -107,14 +107,8 @@
[XmlIgnore]
public Discriminator Discriminator
{
- get
- {
- return _discriminator;
- }
- set
- {
- _discriminator = value;
- }
+ get { return _discriminator; }
+ set { _discriminator = value; }
}
/// <summary>
@@ -179,14 +173,24 @@
_className = value;
}
}
+
+ /// <summary>
+ /// Sets the IDataExchange
+ /// </summary>
+ [XmlIgnore]
+ public IDataExchange DataExchange
+ {
+ set { _dataExchange = value; }
+ }
#endregion
#region Constructor (s) / Destructor
/// <summary>
/// Do not use direclty, only for serialization.
/// </summary>
- public ResultMap()
+ public ResultMap(DataExchangeFactory dataExchangeFactory)
{
+ _dataExchangeFactory = dataExchangeFactory;
}
#endregion
@@ -202,6 +206,8 @@
try
{
_class =
configScope.SqlMapper.TypeHandlerFactory.GetType(_className);
+ _dataExchange =
_dataExchangeFactory.GetDataExchangeForClass(_class);
+
if (Type.GetTypeCode(_class) == TypeCode.Object)
{
_objectFactory =
configScope.SqlMapper.ObjectFactory.CreateFactory(_class);
@@ -309,33 +315,7 @@
/// <param name="dataBaseValue">The database value to
set.</param>
public void SetValueOfProperty( ref object target,
ResultProperty property, object dataBaseValue )
{
- if (target is Hashtable)
- {
- ((Hashtable) target).Add(property.PropertyName,
dataBaseValue);
- }
- else
- {
- if ( target.GetType() != _class )
- {
- throw new ArgumentException( "Could not
set value of type '"+ target.GetType() +"' in property
'"+property.PropertyName+"' of type '"+_class+"'" );
- }
-
- if ( property.MemberAccessor != null )
- {
- if (property.IsComplexMemberName)
- {
-
ObjectProbe.SetPropertyValue(target, property.PropertyName, dataBaseValue);
- }
- else
- {
-
property.MemberAccessor.Set(target, dataBaseValue);
- }
- }
- else // Primitive type ('value')
- {
- target = dataBaseValue;
- }
- }
+ _dataExchange.SetData(ref target, property,
dataBaseValue);
}
/// <summary>
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/Configuration/Serializers/ResultMapDeSerializer.cs
Sat Apr 1 10:53:15 2006
@@ -1,7 +1,7 @@
#region Apache Notice
/*****************************************************************************
* $Header: $
- * $Revision: $
+ * $Revision$
* $Date$
*
* iBATIS.NET Data Mapper
@@ -47,7 +47,7 @@
/// <returns></returns>
public static ResultMap Deserialize(XmlNode node,
ConfigurationScope configScope)
{
- ResultMap resultMap = new ResultMap();
+ ResultMap resultMap = new ResultMap(
configScope.DataExchangeFactory );
NameValueCollection prop =
NodeUtils.ParseAttributes(node, configScope.Properties);
resultMap.ClassName = prop["class"];
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/BaseDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -65,9 +65,18 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public abstract void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue);
+ public abstract void SetData(ref object target, ResultProperty
mapping, object dataBaseValue);
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public abstract void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue);
#endregion
}
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ComplexDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -66,11 +66,23 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public override void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue)
+ public override void SetData(ref object target, ResultProperty
mapping, object dataBaseValue)
{
-
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
+ }
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public override void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue)
+ {
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
}
#endregion
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DictionaryDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -23,6 +23,7 @@
********************************************************************************/
#endregion
+using System.Collections;
using IBatisNet.Common.Utilities.Objects;
using IBatisNet.DataMapper.Configuration.ParameterMapping;
using IBatisNet.DataMapper.Configuration.ResultMapping;
@@ -59,11 +60,23 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public override void SetData(ref object target, ResultProperty
mapping, object dataBaseValue)
+ {
+ ((IDictionary) target).Add(mapping.PropertyName,
dataBaseValue);
+ }
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public override void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue)
+ public override void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue)
{
-
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
}
#endregion
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/DotNetObjectDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -63,15 +63,6 @@
}
else
{
-// if (mapping.MemberAccessor!=null)
-// {
-// return
mapping.MemberAccessor.Get(parameterObject);
-// }
-// else//Dynamic Iterate Id[0]
-// {
-//
-// return
ObjectProbe.GetPropertyValue(parameterObject, mapping.PropertyName);
-// }
return
mapping.MemberAccessor.Get(parameterObject);
}
}
@@ -80,11 +71,41 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public override void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue)
+ public override void SetData(ref object target, ResultProperty
mapping, object dataBaseValue)
{
- mapping.MemberAccessor.Set(parameterObject,
dataBaseValue);
+ if ( target.GetType() != _clazz )
+ {
+ throw new ArgumentException( "Could not set
value of type '"+ target.GetType() +"' in property '"+mapping.PropertyName+"'
of type '"+_clazz+"'" );
+ }
+ if ( mapping.IsComplexMemberName)
+ {
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
+ }
+ else
+ {
+ mapping.MemberAccessor.Set(target,
dataBaseValue);
+ }
+ }
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public override void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue)
+ {
+ if (mapping.IsComplexMemberName)
+ {
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
+ }
+ else
+ {
+ mapping.MemberAccessor.Set(target,
dataBaseValue);
+ }
}
#endregion
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
--- ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
(original)
+++ ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/IDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -44,8 +44,17 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- void SetData(ResultProperty mapping, object parameterObject,
object dataBaseValue);
+ void SetData(ref object target, ResultProperty mapping, object
dataBaseValue);
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ void SetData(ref object target, ParameterProperty mapping,
object dataBaseValue);
}
}
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/ListDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -59,10 +59,23 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public override void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue)
+ public override void SetData(ref object target, ResultProperty
mapping, object dataBaseValue)
{
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
+ }
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public override void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue)
+ {
+ ObjectProbe.SetPropertyValue(target,
mapping.PropertyName, dataBaseValue);
}
#endregion
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/DataExchange/PrimitiveDataExchange.cs
Sat Apr 1 10:53:15 2006
@@ -69,11 +69,23 @@
/// Sets the value to the result property.
/// </summary>
/// <param name="mapping"></param>
- /// <param name="parameterObject"></param>
+ /// <param name="target"></param>
/// <param name="dataBaseValue"></param>
- public override void SetData(ResultProperty mapping, object
parameterObject, object dataBaseValue)
+ public override void SetData(ref object target, ResultProperty
mapping, object dataBaseValue)
{
- mapping.MemberAccessor.Set(parameterObject,
dataBaseValue);
+ target = dataBaseValue;
+ }
+
+ /// <summary>
+ /// Sets the value to the parameter property.
+ /// </summary>
+ /// <remarks>Use to set value on output parameter</remarks>
+ /// <param name="mapping"></param>
+ /// <param name="target"></param>
+ /// <param name="dataBaseValue"></param>
+ public override void SetData(ref object target,
ParameterProperty mapping, object dataBaseValue)
+ {
+ target = dataBaseValue;
}
#endregion
Modified:
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
URL:
http://svn.apache.org/viewcvs/ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs?rev=390726&r1=390725&r2=390726&view=diff
==============================================================================
---
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
(original)
+++
ibatis/trunk/cs/mapper/IBatisNet.DataMapper/MappedStatements/MappedStatement.cs
Sat Apr 1 10:53:15 2006
@@ -45,6 +45,7 @@
using IBatisNet.DataMapper.Scope;
using IBatisNet.DataMapper.TypeHandlers;
using IBatisNet.Common.Utilities.Objects.Members;
+using IBatisNet.DataMapper.DataExchange;
#endregion
@@ -276,7 +277,7 @@
if
(_sqlMap.TypeHandlerFactory.IsSimpleType(_statement.ResultClass))
{
// Create a ResultMap
- ResultMap resultMap = new
ResultMap();
+ ResultMap resultMap = new
ResultMap(request.DataExchangeFactory);
// Create a ResultProperty
ResultProperty property = new
ResultProperty();
@@ -285,8 +286,9 @@
property.TypeHandler =
_sqlMap.TypeHandlerFactory.GetTypeHandler(outObject.GetType());
resultMap.AddResultPropery(property);
+ resultMap.DataExchange =
request.DataExchangeFactory.GetDataExchangeForClass( typeof(int) );// set the
PrimitiveDataExchange
- SetObjectProperty(request,
request.ResultMap, property, ref outObject, reader);
+ SetObjectProperty(request,
resultMap, property, ref outObject, reader);
}
else if (outObject is IDictionary)
{
@@ -402,14 +404,7 @@
object dataBaseValue =
mapping.TypeHandler.GetDataBaseValue(
((IDataParameter)command.Parameters[parameterName]).Value, result.GetType() );
request.IsRowDataFound =
request.IsRowDataFound || (dataBaseValue != null);
- if (mapping.IsComplexMemberName
|| typeof(IDictionary).IsAssignableFrom(request.ParameterMap.Class))
- {
-
ObjectProbe.SetPropertyValue(result, mapping.PropertyName, dataBaseValue);
- }
- else
- {
-
mapping.MemberAccessor.Set(result, dataBaseValue);
- }
+
request.ParameterMap.SetOutputParameter(ref result, mapping, dataBaseValue);
}
}
}
@@ -1231,14 +1226,14 @@
object dataBaseValue =
mapping.GetDataBaseValue( reader );
request.IsRowDataFound = request.IsRowDataFound
|| (dataBaseValue != null);
- if (resultMap != null)
- {
+// if (resultMap != null)
+// {
resultMap.SetValueOfProperty( ref
target, mapping, dataBaseValue );
- }
- else
- {
- MappedStatement.SetValueOfProperty( ref
target, mapping, dataBaseValue );
- }
+// }
+// else
+// {
+// MappedStatement.SetValueOfProperty( ref
target, mapping, dataBaseValue );
+// }
#endregion
}
else if (mapping.NestedResultMap != null) //
'resultMap' ResultProperty
@@ -1251,7 +1246,7 @@
obj = null;
}
- MappedStatement.SetValueOfProperty( ref target,
mapping, obj );
+ resultMap.SetValueOfProperty( ref target,
mapping, obj );
}
else //'select' ResultProperty
{
@@ -1364,47 +1359,6 @@
}
}
-
- private static void SetValueOfProperty( ref object target,
ResultProperty property, object dataBaseValue )
- {
- if (target is Hashtable)
- {
- ((Hashtable) target).Add(property.PropertyName,
dataBaseValue);
- }
- else
- {
- if (property.PropertyName == "value")
- {
- target = dataBaseValue;
- }
- else
- {
- if (dataBaseValue == null)
- {
- if
(property.IsComplexMemberName)
- {
-
ObjectProbe.SetPropertyValue( target, property.PropertyName, null);
- }
- else
- {
-
property.MemberAccessor.Set(target, null);
- }
- }
- else
- {
- if
(property.IsComplexMemberName)
- {
-
ObjectProbe.SetPropertyValue(target, property.PropertyName, dataBaseValue);
- }
- else
- {
-
property.MemberAccessor.Set(target, dataBaseValue);
- }
- }
- }
- }
- }
-
/// <summary>
/// Raise an event ExecuteEventArgs
@@ -1444,6 +1398,7 @@
{
ReaderAutoMapper readerAutoMapper = new
ReaderAutoMapper(_sqlMap.TypeHandlerFactory,
_sqlMap.MemberAccessorFactory,
+ _sqlMap.DataExchangeFactory,
reader,
ref resultObject);
readerAutoMapper.AutoMapReader( reader, ref
resultObject );
@@ -1460,6 +1415,7 @@
_readerAutoMapper = new
ReaderAutoMapper(
_sqlMap.TypeHandlerFactory,
_sqlMap.MemberAccessorFactory,
+
_sqlMap.DataExchangeFactory,
reader,
ref
resultObject);
}
@@ -1474,7 +1430,7 @@
private class ReaderAutoMapper
{
- private ResultMap _resultMap = new ResultMap();
+ private ResultMap _resultMap = null;
/// <summary>
///
@@ -1483,15 +1439,19 @@
/// <param name="resultObject"></param>
/// <param name="typeHandlerFactory"></param>
/// <param name="memberAccessorFactory"></param>
+ /// <param name="dataExchangeFactory"></param>
public ReaderAutoMapper(TypeHandlerFactory
typeHandlerFactory,
IMemberAccessorFactory memberAccessorFactory,
+ DataExchangeFactory dataExchangeFactory,
IDataReader reader,
ref object resultObject)
{
+ Type targetType = resultObject.GetType();
+ _resultMap = new ResultMap(dataExchangeFactory);
+ _resultMap.DataExchange =
dataExchangeFactory.GetDataExchangeForClass( targetType );
try
{
// Get all PropertyInfo from the
resultObject properties
- Type targetType =
resultObject.GetType();
ReflectionInfo reflectionInfo =
ReflectionInfo.GetInstance(targetType);
string[] propertiesName =
reflectionInfo.GetWriteablePropertyNames();
@@ -1538,7 +1498,6 @@
else
{
propertyType =
matchedMemberAccessor.MemberType;
-
//reflectionInfo.GetSetterType(matchedPropertyInfo.Name);
}
if(propertyType != null ||
matchedMemberAccessor != null)
@@ -1554,21 +1513,6 @@
}
_resultMap.AddResultPropery(property);
}
-
- //
// Fix for IBATISNET-73 (JIRA-73) from Ron Grabowski
- //
if (property.PropertyName != null &&
property.PropertyName.Length > 0)
- //
{
- //
// Set TypeHandler
- //
Type propertyType =
reflectionInfo.GetSetterType(property.PropertyName);
- //
property.TypeHandler =
typeHandlerFactory.GetTypeHandler( propertyType );
- //
}
- //
else
- //
{
- //
if (_logger.IsDebugEnabled)
- //
{
- //
_logger.Debug("The column [" + columnName + "]
could not be auto mapped to a property on [" + resultObject.ToString() + "]");
- //
}
- //
}
}
}
catch (Exception e)
@@ -1587,7 +1531,7 @@
foreach (string key in
_resultMap.ColumnsToPropertiesMap.Keys)
{
ResultProperty property =
(ResultProperty) _resultMap.ColumnsToPropertiesMap[key];
- MappedStatement.SetValueOfProperty( ref
resultObject, property,
+ _resultMap.SetValueOfProperty( ref
resultObject, property,
property.GetDataBaseValue(
reader ));
}
}