2010-09-27 6 views
3

Так что я делаю поиск в почтовом индексе, предоставляемый внешним поставщиком данных в базе данных, которую мы контролируем с помощью nHibernate. Это включает вызов хранимой процедуры и предоставление почтового индекса. Взамен я получаю несколько строк, каждая из которых содержит несколько столбцов, составляющих части адреса.с помощью nHibernate для передачи неотображаемых данных в DTO

У нас есть адрес DTO. Но я борюсь с тем, как отбрасывать результаты БД в этот объект, поскольку он не привязан к чему-либо в базе данных. Я делаю это:

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, которые позволят мне получить к ним доступ.

Как получить данные для его отображения?

Приветствия, Matt

ответ

7

Вы можете попробовать массовую загрузку данных в объемном класса, как:

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

Подробнее: NHibernate Ad-hoc mapping

+0

Я просто попытался это, и хотя он компилирует и работает. мой объект списка возвращается пустым. Dto, который я построил, скорее длиннее вашего примера с двумя свойствами, но не более сложным (просто связкой строк) .. какие-нибудь идеи, что происходит? –

+0

Получил это - между набором записей и Dto было несоответствие имен. Спасибо - как обычно, nHibernate оказывается умнее, чем я ожидал :) –

+0

Рад, что это сработало. :) – rebelliard

Смежные вопросы