06 October 2005
Here’s a “basic” CSLA .NET 2.0 editable root class. It pretty much illustrates all the things you can do in a class under the upcoming version of the framework. In particular note the way validation rules are handled and all the transactional options in the DataPortal_XYZ methods (presumably you’d pick one for your app :) ).
A CustomerTypes class is also included at the bottom, illustrating how to implement a name-value list that works with data binding.
Imports CSLA<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
Public Class Customer
Inherits BusinessBase(Of Customer)
Region ” Business Methods “
Private mID As Integer
Private mLastName As String = ”“
Private mFirstName As String = ”“
Private mLastActivity As SmartDate
Private mType As Integer
Private mCity As String = ”“
Private Shared mCustomerTypes As CustomerTypes
<?xml:namespace prefix = st1 ns = “urn:schemas-microsoft-com:office:smarttags” />
Get
If CanReadProperty() Then
Return mCity
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
Set(ByVal value As String)
If CanWriteProperty() Then
If Not mCity.Equals(value) Then
End If
Else
Throw New System.Security.SecurityException( _
“Property write not allowed”)
End If
End Set
End Property
Public Shared ReadOnly Property CustomerTypes() As CustomerTypes
Get
If mCustomerTypes Is Nothing Then
End If
Return mCustomerTypes
End Get
End Property
Public ReadOnly Property ID() As Integer
Get
Return mID
End Get
End Property
Public Property LastName() As String
Get
If CanReadProperty() Then
Return mLastName
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
Set(ByVal value As String)
If CanWriteProperty() Then
If mLastName <> value Then
End If
Else
Throw New System.Security.SecurityException( _
“Property write not allowed”)
End If
End Set
End Property
Public Property FirstName() As String
Get
If CanReadProperty() Then
Return mFirstName
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
Set(ByVal value As String)
If CanWriteProperty() Then
If mFirstName <> value Then
End If
Else
Throw New System.Security.SecurityException( _
“Property write not allowed”)
End If
End Set
End Property
Public Property LastActivity() As String
Get
If CanReadProperty() Then
Return mLastActivity.Text
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
Set(ByVal value As String)
If CanWriteProperty() Then
If mLastActivity <> value Then
End If
Else
Throw New System.Security.SecurityException( _
“Property write not allowed”)
End If
End Set
End Property
Public Property CustomerType() As Integer
Get
If CanReadProperty() Then
Return mType
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
Set(ByVal value As Integer)
If CanWriteProperty() Then
If mType <> value Then
End If
Else
Throw New System.Security.SecurityException( _
“Property write not allowed”)
End If
End Set
End Property
Public ReadOnly Property CustomerTypeText() As String
Get
If CanReadProperty() Then
Return CustomerTypes.Value(mType)
Else
Throw New System.Security.SecurityException( _
“Property read not allowed”)
End If
End Get
End Property
End Region
Region ” Business Rules “
Protected Overrides Sub AddBusinessRules()
AddressOf Validation.CommonRules.StringRequired, _
“FirstName”)
AddressOf Validation.CommonRules.StringRequired, _
“LastName”)
End Sub
End Region
Region ” Object ID Value “
Protected Overrides Function GetIdValue() As Object
Return mID
End Function
End Region
Region ” Constructors “
Private Sub New()
' don't allow a Guest to see or change city data
AuthorizationRules.DenyRead("City", "Guest")
AuthorizationRules.DenyWrite("City", "Guest")
End Sub
End Region
Region ” Factory Methods “
Public Shared Function NewCustomer() As Customer
Return DataPortal.Create(Of Customer)(Nothing)
End Function
Public Shared Function GetCustomer(ByVal id As Integer) As Customer
Return DataPortal.Fetch(Of Customer)(New Criteria(id))
End Function
Public Shared Sub DeleteCustomer(ByVal id As Integer)
DataPortal.Delete(New Criteria(id))
End Sub
End Region
Region ” Criteria “
Private Class Criteria
Public ID As Integer
Public Sub New(ByVal id As Integer)
Me.ID = id
End Sub
End Class
End Region
Region ” Data Access “
' Forced to run on client
<RunLocal()> _
Protected Overrides Sub DataPortal_Create(ByVal criteria As Object)
’ get default values from db
’ we get here via DataPortal.Create()
New System.Random().Next(100, 999)
End Sub
' Runs on client or server based on DataPortal config
Protected Overrides Sub DataPortal_Fetch(ByVal criteria As Object)
’ get data from db
’ we get here via DataPortal.Fetch()
Dim crit As Criteria = DirectCast(criteria, Criteria)
“Hybrid”)
“Lhotka”
“Rocky”
End Sub
' COM+ transactions
<Transactional()> _
Protected Overrides Sub DataPortal_Insert()
’ insert data into db
’ we get here via obj.Save()
End Sub
' System.Transactions namespace
Protected Overrides Sub DataPortal_Update()
’ update data in db
’ we get here via obj.Save()
Using tr As New System.Transactions.TransactionScope
’ do updates
End Using
End Sub
' ADO.NET transactions
Protected Overrides Sub DataPortal_DeleteSelf()
’ do deferred delete of self
’ we get here via obj.Save()
Using cn As New SqlClient.SqlConnection
Using tr As SqlClient.SqlTransaction = cn.BeginTransaction
’ do delete
End Using
End Using
End Sub
' No transactions
Protected Overrides Sub DataPortal_Delete(ByVal criteria As Object)
Dim crit As Criteria = DirectCast(criteria, Criteria)
’ do immediate delete based on criteria
’ we get here via DataPortal.Delete()
End Sub
End Region
End Class
======================================================
Imports CSLA
Public Class CustomerTypes
Inherits NameValueListBase(Of Integer, String)
Public Function DefaultKey() As Integer
Return 1
End Function
Public Function DefaultValue() As String
Return Value(DefaultKey)
End Function
Private Sub New()
End Sub
Public Shared Function GetCustomerTypes() As CustomerTypes
Return DataPortal.Fetch(Of CustomerTypes) _
(New Criteria(GetType(CustomerTypes)))
End Function
Protected Overrides Sub DataPortal_Fetch(ByVal criteria As Object)
Me.IsReadOnly = False
New NameValuePair(1, “Domestic”))
New NameValuePair(2, “International”))
New NameValuePair(3, “Hybrid”))
Me.IsReadOnly = True
End Sub
End Class