DotNetNuke implements the IHydratable interface to allow you to create a method that will be used for custom hydration.
For example, in the Survey module you can convert code such as this:
Public Shared Function GetSurveys(ByVal ModuleId As Integer) As List(Of SurveyInfo)
Dim SurveyInfolist As List(Of SurveyInfo) = New List(Of SurveyInfo)
Using dr As IDataReader = DataProvider.Instance().GetSurveys(ModuleId)
While dr.Read
Dim SurveyInfo As SurveyInfo = New SurveyInfo
SurveyInfo.SurveyId = Convert.ToInt32(dr("SurveyId"))
SurveyInfo.Question = Convert.ToString(dr("Question"))
SurveyInfo.OptionType = Convert.ToString(dr("OptionType"))
SurveyInfo.ViewOrder = Convert.ToInt32(ConvertNullInteger(dr("ViewOrder")))
SurveyInfo.CreatedByUser = Convert.ToInt32(dr("CreatedByUser"))
SurveyInfo.CreatedDate = Convert.ToDateTime(dr("CreatedDate"))
SurveyInfolist.Add(SurveyInfo)
End While
End Using
Return SurveyInfolist
End Function
Public Shared Function GetSurvey(ByVal SurveyID As Integer, ByVal ModuleId As Integer) As SurveyInfo
Dim SurveyInfo As SurveyInfo = New SurveyInfo
Using dr As IDataReader = DataProvider.Instance().GetSurvey(SurveyID, ModuleId)
While dr.Read
SurveyInfo.SurveyId = Convert.ToInt32(dr("SurveyId"))
SurveyInfo.ModuleId = Convert.ToInt32(dr("ModuleID"))
SurveyInfo.Question = Convert.ToString(dr("Question"))
SurveyInfo.OptionType = Convert.ToString(dr("OptionType"))
SurveyInfo.ViewOrder = Convert.ToInt32(ConvertNullInteger(dr("ViewOrder")))
SurveyInfo.Votes = Convert.ToInt32(ConvertNullInteger(dr("Votes")))
SurveyInfo.CreatedByUser = Convert.ToInt32(dr("CreatedByUser"))
SurveyInfo.CreatedDate = Convert.ToDateTime(dr("CreatedDate"))
End While
End Using
Return SurveyInfo
End Function
To this:
Public Shared Function GetSurveys(ByVal ModuleId As Integer) As List(Of SurveyInfo)
Return CBO.FillCollection(Of SurveyInfo)(DataProvider.Instance().GetSurveys(ModuleId))
End Function
Public Shared Function GetSurvey(ByVal SurveyID As Integer, ByVal ModuleId As Integer) As SurveyInfo
Return CBO.FillObject(Of SurveyInfo)(DataProvider.Instance().GetSurvey(SurveyID, ModuleId))
End Function
By altering the "Info" class to this:
Imports System
Imports System.Data
Imports DotNetNuke
Namespace DotNetNuke.Modules.Survey
Public Class SurveyInfo
Implements Entities.Modules.IHydratable
' local property declarations
Private _SurveyId As Integer
Private _ModuleId As Integer
Private _Question As String
Private _ViewOrder As Integer
Private _OptionType As String
Private _CreatedByUser As Integer
Private _CreatedDate As Date
Private _Votes As Integer
' initialization
Public Sub New()
End Sub
' public properties
Public Property SurveyId() As Integer
Get
Return _SurveyId
End Get
Set(ByVal Value As Integer)
_SurveyId = Value
End Set
End Property
Public Property ModuleId() As Integer
Get
Return _ModuleId
End Get
Set(ByVal Value As Integer)
_ModuleId = Value
End Set
End Property
Public Property Question() As String
Get
Return _Question
End Get
Set(ByVal Value As String)
_Question = Value
End Set
End Property
Public Property ViewOrder() As Integer
Get
Return _ViewOrder
End Get
Set(ByVal Value As Integer)
_ViewOrder = Value
End Set
End Property
Public Property OptionType() As String
Get
Return _OptionType
End Get
Set(ByVal Value As String)
_OptionType = Value
End Set
End Property
Public Property CreatedByUser() As Integer
Get
Return _CreatedByUser
End Get
Set(ByVal Value As Integer)
_CreatedByUser = Value
End Set
End Property
Public Property CreatedDate() As Date
Get
Return _CreatedDate
End Get
Set(ByVal Value As Date)
_CreatedDate = Value
End Set
End Property
Public Property Votes() As Integer
Get
Return _Votes
End Get
Set(ByVal Value As Integer)
_Votes = Value
End Set
End Property
#Region "IHydratable Implementation"
Public Property KeyID() As Integer Implements Entities.Modules.IHydratable.KeyID
Get
Return SurveyId
End Get
Set(ByVal value As Integer)
SurveyId = value
End Set
End Property
Public Sub Fill(ByVal dr As IDataReader) Implements Entities.Modules.IHydratable.Fill
SurveyId = Convert.ToInt32(Null.SetNull(dr.Item("SurveyId"), SurveyId))
Question = Convert.ToString(Null.SetNull(dr.Item("Question"), Question))
OptionType = Convert.ToString(Null.SetNull(dr.Item("OptionType"), OptionType))
ViewOrder = Convert.ToInt32(Null.SetNull(dr.Item("ViewOrder"), ViewOrder))
CreatedByUser = Convert.ToInt32(Null.SetNull(dr.Item("CreatedByUser"), CreatedByUser))
CreatedDate = Convert.ToDateTime(Null.SetNull(dr.Item("CreatedDate"), CreatedDate))
'These vales are only present in the datareader if it has more than 6 fields
If dr.FieldCount > 6 Then
ModuleId = Convert.ToInt32(Null.SetNull(dr.Item("ModuleId"), ModuleId))
Votes = Convert.ToInt32(Null.SetNull(dr.Item("Votes"), Votes))
End If
End Sub
#End Region
End Class