Rockford Lhotka
    CTO at Magenic
    Author, speaker, software architect
    Creator of the CSLA .NET framework

About me
Contact me


Version 3.6.1 change log


This document is the change log for version 3.6.1 of CSLA .NET for Windows.


For a more complete list of changes, go to, select “all issues” and filter the status to “closed” and/or “checked in”.


Note: The VB version of CSLA .NET 3.6 is a work in progress. This is a community effort by volunteers, and it is not yet complete. When using CSLA .NET in a production setting, I recommend using the official C# release, and using the VB release primarily as a learning tool.


Click here for a list of known issues with this version.


Release 3.6.1-090204:


Field Manager (090204)

Throw an InvalidOperationException when an attempt is made to call RegisterProperty() to register a property against a type that has already been instantiated. This will prevent an obscure and extremely hard to debug issue where PropertyInfo<T> objects would be “grafted” onto an existing type, but with invalid index values – resulting in exceptions or lost/corrupted field data in an object.


Serialization (090204)

Rework the code for OnDeserialized() in BusinessBase, ReadOnlyBase, BusinessListBase and ExtendedBindingList to try and minimize the impact if someone forgets to invoke base.OnDeserialized() in their subclasses. This is still not foolproof, but should avoid some common issues. People should still call base.OnDeserialized() before doing any other work in their override of the method.


PropertyStatus (090202)

Fix null ref issue with the control.


Pre-release 3.6.1-090130:


ObjectFactory (090129)

Added a CheckRules() method to the ObjectFactory base class.


Async Factory Snippet (090129)

Added a snippet for an async factory method.


ReadWriteAuthorization (090128)

Fix a bug with the control where it was double-hooking the Format event.


PropertyStatus (090127)

The control was accidentally enabling the UI control for a read-only property. This change means that PropertyStatus will now explicitly disable the UI control if the property is read-only or the user isn’t authorized to change the property.


Pre-release 3.6.1-090123:


Field Manager (090123)

Add functionality in field manager so it uses reflection to force the initialization of static fields in every class in an inheritance hierarchy, thus eliminating the need to use the _forceInit technique described in Expert C# 2008 Business Objects.


Server\ObjectFactory (090123)

Add a LoadProperty() method so a factory can load properties of a business object. This does require that the PropertyInfo<T> fields of the business object be accessible to the factory object, so they’ll probably need to be internal or public in scope.


Async DataPortal (090120)

Fix issue where an exception in a DataPortal_XYZ method would cause an exception in the async callback handler, so the exception didn’t flow back to the caller as expected.


BusinessListBase (090120)

Fix issues where ListChanged and ChildChanged would fire multiple times, and the behavior was inconsistent before/after serialization of the list object.


Pre-release 3.6.1-090114:


LINQ to CSLA (090105)

Add support for sorting a BusinessListBase list into a LinqBindingList through a LINQ query.


DataPortal - WcfProxy (090102)

Fixed some issues with WcfProxy so subclassing works as expected.


Serialization\MobileFormatter (090114)

Add support for DateTimeOffset type.


DataPortal (090114)

Add ResetProxyType() method to reset the proxy type. You should call this method if your application changes the proxy type in configuration during runtime. The next data portal call will then cause the type value to be reevaluated.


Also, to make it easier to change the proxy type during runtime, ApplicationContext.DataPortalProxy is now a read-write property. Setting this property will automatically call DataPortal.ResetProxyType().


FieldManager (090114)

Make the GetFieldData() method public.


BusinessBase (090114)

Fix issue with null values and string properties, so a string property set to a null is actually set to string.Empty.




(Updated 2/4/2009 8:59:34 PM)