Vibrant discussion about CSLA .NET and using the framework to build great business applications.
This may sound like a silly question, but I am getting a runtime error when I get/set a property. I am using Visual Studio 2010 and CSLA 4.0. The CanReadProperty and the PropertyHasChanged calls are where it bombs. I understand some things were changed somewhere around CSLA 3.5 and 4.0. I have looked everywhere on the forum and can't find this answer. Do I need to convert/cast my property name to type iPropertyInfo? If so, how? Here's my code.
Public Property Description() As String Get CanReadProperty("Description", True) Return _description End Get Set(ByVal value As String) CanWriteProperty("Description", True) If value Is Nothing Then value = String.Empty If Not _description.Equals(value) Then _description = value PropertyHasChanged("Description") End If End Set End Property
Your code looks like legacy code from Csla 2.x/3.x and will not be able to work with Csla 4 without a certain amount of changes. Sorry - there is no workaround for having your legacy code work in CSLA 4.0 without changing the property declarations. You will also have o rewrite all of your custom validation rules and authorization rules to conform with new syntax and new rule engine. I'd recommend to look at the new snippets and class templates that is included with Csla 4. You should also read the release notes for all newer version from your original version to catch all breaking changes. These are available at http://www.lhotka.net/cslanet/Download.aspxIn newer versions of Csla the property declaration syntax has been greatly simplified so this is how a property should be declared now:
Public Shared ReadOnly DescriptionProperty As PropertyInfo(Of String) = RegisterProperty(Of String)(Function(c) c.Description)Public Property Description() As String Get Return GetProperty(DescriptionProperty) End Get Set SetProperty(DescriptionProperty, value) End SetEnd Propertyor to use a private backing field:Dim _description As StringPublic Shared ReadOnly DescriptionProperty As PropertyInfo(Of String) = RegisterProperty(Of String)(Function(c) c.Description, RelationshipTypes.PrivateField)Public Property Description() As String Get Return GetProperty(DescriptionProperty, _description) End Get Set SetProperty(DescriptionProperty, _description, value) End SetEnd PropertyI think that Structural Search and Replace function of R# may help you but I haven't tried this on VB.NET code.
Jonny Bekkum, Norway
If you wish to do only minor/minimum of changes to your code then I would only upgrade to Csla 3.8.x. Your property declarations and rules should run in Csla 3.8.x without any major workover.
The inner workings of Csla 4 has changed so much that you will have to rewrite much of your properties, rules and authorization to make it run.