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
 
 

Reply via email to