使用nHibernate将未映射的数据转换为DTO

时间:2010-09-27 11:05:50

标签: .net nhibernate

所以我正在使用外部数据提供程序在我们用nHibernate控制的数据库上进行邮政编码查找。这涉及调用存储过程并提供邮政编码。作为回报,我得到了许多行,每行包含构成地址部分的多个列。

我们有一个地址DTO。但我正在努力解决如何将DB结果转换为此对象,因为它没有映射到数据库中的任何内容。我这样做:

    Dim spCall As String = String.Format("exec AddressFindListPostCode '{0}'", postcode)
    Dim tran As Global.NHibernate.Transform.IResultTransformer = Global.NHibernate.Transform.Transformers.AliasToBean(GetType(Concrete.Cms.DataTransferObjects.Address))
    Dim streetList As IList(Of Concrete.Cms.DataTransferObjects.Address) = session.CreateSQLQuery(spCall).SetResultTransformer(tran).List(Of Concrete.Cms.DataTransferObjects.Address)()

但是,如果没有某种映射的帮助,它当然不能将结果集转换为对象。

问题本质上是SP返回一个对象列表。每个对象(相当于一行)包含对应于行内列的子对象。但我认为无法获得子对象。 streetList(i,j)不起作用,streetList上没有允许我访问它们的方法或属性。

如何获取数据以进行映射?

干杯, 马特

1 个答案:

答案 0 :(得分:7)

您可以尝试将数据批量加载到批量类中,例如:

 Dim result As IList(Of BulkLoadAddressList) = session.CreateSQLQuery(spCall)
    .SetResultTransformer(Transformers.AliasToBean(typeof(BulkLoadAddressList)))
    .List(Of BulkLoadAddressList)()

更多:NHibernate Ad-hoc mapping