IHydratable: Use the CBO again for your DotNetNuke® Module

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.