Hi,
Is there a way to get a dictionary populated with a value, where the
value is a complex property?
And is this possible for 1:1 and 1:M relationships?
For example, the following resultMap and statement:
<resultMaps>
<resultMap id="SalesOrder.GetResult" class="Map" groupBy="Id">
<result property="Id" column="SalesOrderID" />
<result property="Date" column="OrderDate" />
<result property="TotalDue" column="TotalDue" />
<result property="Contact" resultMapping="Contact.GetResult" />
<result property="Details"
resultMapping="SalesOrderDetail.GetResult" />
</resultMap>
<!-- One to one relationship -->
<resultMap id="Contact.GetResult" class="Map">
<result property="Id" column="ContactID" />
<result property="FirstName" column="FirstName" />
<result property="LastName" column="LastName" />
</resultMap>
<!-- One to many relationship -->
<resultMap id="SalesOrderDetail.GetResult" class="Map" groupBy="Id">
<result property="Id" column="SalesOrderDetailID" />
<result property="Quantity" column="OrderQty" />
<result property="UnitPrice" column="UnitPrice" />
<result property="LineTotal" column="LineTotal" />
</resultMap>
</resultMaps>
<statements>
<select id="SalesOrder.Get" parameterClass="int"
resultMap="SalesOrder.GetResult">
select
Sales.SalesOrderHeader.SalesOrderID,
Sales.SalesOrderHeader.OrderDate,
Sales.SalesOrderHeader.TotalDue,
Person.Contact.ContactID,
Person.Contact.FirstName,
Person.Contact.LastName,
Sales.SalesOrderDetail.SalesOrderDetailID,
Sales.SalesOrderDetail.OrderQty,
Sales.SalesOrderDetail.UnitPrice,
Sales.SalesOrderDetail.LineTotal
from
Sales.SalesOrderHeader
LEFT OUTER JOIN Person.Contact
ON Sales.SalesOrderHeader.ContactID = Person.Contact.ContactID
LEFT OUTER JOIN Sales.SalesOrderDetail
ON Sales.SalesOrderHeader.SalesOrderID =
Sales.SalesOrderDetail.SalesOrderID
where
Sales.SalesOrderHeader.SalesOrderID = #value#
</select>
</statements>
When I try to run this against the MS AdventureWorks database I get the
following exception:
IBatisNet.Common.Exceptions.ConfigurationException was caught
Message="\r\n- The error occurred while Resolve 'resultMap'
attribute on Result Property."
Source="IBatisNet.DataMapper"
StackTrace:
at
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Build(XmlDocument
document, DataSource dataSource, Boolean useConfigFileWatcher, Boolean
isCallFromDao)
at
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Build(XmlDocument
document, Boolean useConfigFileWatcher)
at
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ConfigureAndWatch(St
ring resource, ConfigureHandler configureDelegate)
at
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.ConfigureAndWatch(Co
nfigureHandler configureDelegate)
at IBatisNet.DataMapper.Mapper.InitMapper()
at IBatisNet.DataMapper.Mapper.Instance()
at TestIBatisNet_AdventureWorks.Form1.Form1_Load(Object
sender, EventArgs e) in
D:\Development\TestIBatisNet-AdventureWorks\TestIBatisNet-AdventureWorks
\Form1.cs:line 20
and this is the inner exception:
"Object reference not set to an instance of an object."
StackTrace:
at
IBatisNet.DataMapper.Configuration.ResultMapping.ResultProperty.get_Memb
erType()\r\n
at
IBatisNet.DataMapper.MappedStatements.PropertyStrategy.PropertyStrategyF
actory.Get(ResultProperty mapping)\r\n
at
IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Initialize()\r\n
at IBatisNet.DataMapper.Configuration.DomSqlMapBuilder.Build(XmlDocument
document, DataSource dataSource, Boolean useConfigFileWatcher, Boolean
isCallFromDao)
Any help appreciated.
Regards,
Chris