Also see:
In Performance, Performance, Performance Charles Nurse blogged about the performance hit of using the CBO (Custom Business Object) hydrator. He suggested creating your own custom hydrator. Now, 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 adding 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
[Back to: The ADefWebserver DotNetNuke HELP WebSite]
DotNetNuke® is a registered trademark of Perpetual Motion Interactive Systems Inc.