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

About me
Contact me


Version 3.6.0 change log


This document is the change log for version 3.6.0 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.


RTW 3.6.0-081217:


XML comments (081217)

Added/changed numerous comments in code.


Wpf\BusyAnimation (081217)

Fix issue where an exception was thrown if this control was hosted in a container, when the container’s initial visibility was Collapsed.


Wpf\PropertyStatus (081217)

Fix issue where an exception was thrown if this control was hosted in a container, when the container’s initial visibility was Collapsed.


UndoableHandler (081217)

Change to proper namespace (Csla.Core).


MethodCaller (081211)

Throw a meaningful exception when attempting to read a value from a non-existent property.


SetProperty (081211)

Fix misleading comments, and bring code in line with Silverlight.


RC1 3.6.0-081205:


ChildChanged event (081204)

Reworked the entire ChildChanged code, eliminating the ___Internal() methods and simplifying the overall process. This should fix the issue where the events weren’t working after deserialization.


Wpf\ObjectStatus (081204)

Fixed DataDecoratorBase so it now understands the ChildChanged event and properly causes a refresh as a result, so ObjectStatus now works as expected.


BusinessBase (081203)

Fixed an issue with SetProperty() where a null input value wasn’t properly being converted to string.Empty.


Validation (081203)

Fixed an issue where an exception thrown from an async rule method wouldn’t be properly caught by the CheckRules() method. Of course async rule methods should never throw an exception, but this fix is still valuable.


RCO 3.6.0-081119:


EditableRootListBase (081119)

When an object is saved and an exception occurs, the original object is now restored to the collection as it was before the ApplyEdit() call. This is a major change to the save functionality, and addresses some common issues using ERLB when such an exception occurs.


Wpf\CslaDataProvider (081118)

When an object is saved and an exception occurs, the original object is now restored as it was before the ApplyEdit() call. This is a major change to the save functionality, and addresses some common issues using the CslaDataProvider when such an exception occurs.


BusinessBase (081118)

Fix an issue that was blocking the use of ListChanged or ChildChanged in a parent object to trigger checking validation rules against child objects.


BusinessBase/ReadOnlyBase (081118)

Clean up code dealing with child event handling.


Wpf\CslaDataProvider (081115)

Return newly created object from the CslaDataProvider.AddNew() method.


ProjectTracker (081107)

Move ProjectTracker application to the Samples folder in svn, and to the Samples download on the download page.


Snippets (081107)

Remove snippets/templates folders from the VB solution. The master source for all these files is the official version of CSLA .NET, which is now only cslacs.


Wpf\PropertyStatus (081107)

Fix issue with errors in a ListBox not displaying initially.


Data\ConnectionManager (081105)

Create non-generic ConnectionManager that uses the connection factory to create the IDbConnection connection object.


Wpf\PropertyStatus (081104)

Fix conflict with Expression Blend designer.


BusinessBase (081104)

Include inner exception when throwing property load exception.


Utilities (081104)

Fix issue with CoerceValue() and DateTime types losing precision.


Beta 2a 3.6.0-081102:


RuleDescription (081028)

Fix bug where RuleDescription didn’t consistently return the correct method class and method name values.


Csla.dll (081026)

Add icon to Csla.dll.


BypassPropertyCheckObject (081027)

Change visibility of this type so it doesn’t appear in Intellisense. This is an internal artifact of the framework, and shouldn’t be directly visible.


Code comments (081028)

Added numerous code comments to many types throughout the framework. I’m about 50% of the way through commenting all the new stuff added for 3.6.


WPF design time detection (081024)

Fixed a race condition bug with the design time detection code for WPF.


FilteredBindingList (081023)

Fix bug in the Clear() method.


Source control (081023)

Merged the 3.6 branch into trunk. This was not as smooth as I’d hoped, and there could be some negative side-effects (though hopefully I caught all issues).


Beta 2 3.6.0-081021:


Visual Studio Templates (081020)

Added more templates, and a Deploy project to create an MSI that installs the templates. This Deploy project will likely grow into an installer for all of CSLA .NET.


Wpf\PropertyStatus (081010)

Fix a bug with PropertyStatus where it wouldn’t work with ReadOnlyBase objects for authorization.


Beta 1a 3.6.0-081009:


ApplicationContext (081008)

Added a LogicalExecutionLocation property to ApplicationContext. This property reflects the logical location of the code, and so reports a “server” location for data portal code whether the data portal is running in local mode or remote mode.


Data Portal – WcfProxy (081008)

Change how the WCF proxy object is disposed to properly abort in the case of an exception.


Windows\CslaActionExtender (081008)

Change control to properly work with the CslaAutoCloneOnUpdate setting.


Windows\BusyAnimation (081008)

Added a BusyAnimation control for Windows Forms that can be used to provide the user with a visual cue that an asynchronous operation is running.


Snippets/Templates (081008)

Added VB snippets and templates to the solution.


Visual Studio Templates (081008)

Added Visual Studio templates for CSLA business object stereotypes. The files in svn can be used to create a VSI, which can be installed on a dev machine to integrate the templates directly into VS. Templates are provided in both C# and VB.


Data\TransactionManager (081003)

Add Connection property to TransactionManager.


BypassPropertyChecks (081002)

Add a BypassPropertyChecks object to BusinessBase to allow a block of code to turn off authorization, business and validation rules on properties. The BypassPropertyChecks object is protected, and is designed to be used with a using statement in a DataPortal_XYZ or object factory method. Inside that using statement you can directly get and set the properties without any authz or business rules executing.


Data Portal (081002)

Changed the way the Silverlight WcfHost class works so it explicitly clears the context and principal objects when a call completes. This is necessary because the .NET data portal may be running in “local” mode, even while actually servicing a request from a remote Silverlight client. This change ensures that the thread is clean when the call completes – addressing both a data leakage issue, and a SerializationException issue in Cassini.


Visual Studio templates (081002)

Added a set of actual VS file templates (some with wizards) in the Visual Studio Templates folder below cslacs. Still working on VB templates, but the C# ones should be pretty much ready to install into VS and use.


Data Portal (081001)

Fix an issue with passing array data as a parameter to the child data portal. The MethodCaller now has a much simpler overall algorithm to deal with method overloads, and also handles this array scenario.


Serialization bug (080930)

Fix an issue with serialization failing in some cases.


Beta 1 3.6.0-080926:


Parent property (080921)

Fix issue where Parent property wasn’t restored on deserialization.


Pre-release 3.6.0-080919:


Data\TransactionManager (080919)

Add TransactionManager class, which acts like ConnectionManager, but for ADO.NET transaction objects.


Security\MembershipIdentity (080919)

Change the class to not be abstract so it can be used directly. This is particularly useful when using it from a pure .NET client or web site.


Wpf\ObjectStatus (080916)

Expose the per-type authorization rules for the business object type as dependency properties. This allows the UI to bind elements to the per-type rules, making it easier to enable/disable those elements.


ChildChanged Event (080916)

Reworked the ChildChanged event so it cascades up through the parent-child containment tree. This required changes to the implementation and the method signature of OnChildChanged(). It also means that the source of the event is handled differently. This is a breaking change if you handle ChildChanged or override OnChildChanged().


Wpf\CslaDataProvider (080916)

Add ObjectInstance property to allow programmatic setting of the business object instance, as well as setting the instance to a resource in XAML. One primary motivation for doing this, is that authorization code can reset the object instance, thus triggering a refresh of the UI binding.


Add a Rebind() method to allow UI code to easily trigger data binding to rebind to the data object. This can be used by authorization code in a form to cause all PropertyStatus controls to refresh.


ApplicationContext (080916)

Change the User property so it manages the principal object directly when running within a WPF application. This ensures that the User property is consistent across all threads of the WPF application without the UI developer having to do anything.


While this does not ensure that all threads have the correct CurrentPrincipal value (and thus doesn’t make .NET code like CAS work), it does ensure that the ApplicationContext.User property is consistent across all threads, so all CSLA .NET code and code using the User property will work.


Wpf\PropertyStatus (080915)

Add PropertyStatus control similar to the Silverlight control. This control manages authorization and validation (including info/warn/error severities) for a bound UI control. It also shows busy status for async validation rules for the bound business object property.


Data Portal WcfProxy (080915)

Add virtual methods so a subclass can control how the channel factory and WCF proxy objects are created and initialized.


Wpf\BusyStatus (080910)

Add a BusyStatus control to Csla.Wpf. This control shows a busy animation and will be used to indicate that the business object is busy performing an asynchronous operation (data portal or validation rule).


DataMapper (080909)

Change reflection code to use dynamic method calling. The functionality remains the same, but the performance is increased by avoiding most reflection. (code contributed by Ricky Supit)


N-level Undo (080909)

Change reflection code to use dynamic method calling. The functionality remains the same, but the performance is increased by avoiding most reflection. (code contributed by Ricky Supit)


Data\ObjectContextManager (080904)

Add an ObjectContextManager to manage ADO.NET Entity Framework context objects, just like the existing ConnectionManager and ContextManager classes.


CommandBase (080903)

The CommandBase class now implements the field manager functionality, allowing a developer to use managed backing fields like they can in BB or ROB. The reason for this is to enable easier serialization to/from Silverlight.


Pre-release 3.6.0-080901:


SingleCriteria (080830)

Add protected constructor to allow subclassing.


IsBusy Property (080818)

BusinessBase and ReadOnlyBase now have an IsBusy property that returns true when the object has an outstanding async operation running. This is comparable to the similar property-level functionality used by async validation rule processing. There are protected methods called MarkBusy() and MarkIdle() to allow a business developer to set the property, and that can be useful if you implement your own async method behaviors.


LoadPropertyAsync Method (080818)

BusinessBase and ReadOnlyBase now have LoadPropertyAsync() methods to allow for asynchronous lazy loading of child objects. This method works much like LoadProperty(), but performs the data portal operation on a background thread. The async result is automatically put into the property when available, and a PropertyChanged event is raised so data binding knows to display the now-available data.


Authentication (080816)

The data portal no longer requires that a custom principal inherit from BusinessPrincipalBase. Any serializable principal/identity can be used, but some principal must be supplied.


Added hook allowing for authorization of every data portal request, where the business developer can provide an IAuthorizeDataPortal implementation and give the assembly qualified type name via the CslaAuthorizationProvider config value. If the request should not be allowed, this provider should throw an exception.


Data Portal (080816)

Continued work on the ObjectFactory concept. When using the ObjectFactory attribute, the data portal now honors the RunLocal attribute on factory methods (if the factory is deployed to the client). It also honors the Transactional attribute on factory methods.


Add an ObjectFactory base class to the Csla.Server namespace. The author of a factory object can inherit from ObjectFactory, which allows them to call MarkOld(), MarkNew() and MarkAsChild() on the objects created by the factory.


Authentication (080812)

Enhanced the various principal and identity base classes to reduce the amount of code required to create a custom subclass. Also made major enhancements to the MembershipIdentity class so it does pretty much everything for you in terms of authentication and loading roles from the role provider.


Unit Testing (080815)

Unit testing (the cslatest solution) now includes an AppDomainProxy, which is a special data portal proxy that runs the data portal server components in a dynamically created AppDomain and on another thread. This provides good simulation of a real remote server without the need for a separate host project and all the related configuration.


Pre-release 3.6.0-080803:


Authentication (080801)

There are now some new base classes in Csla.Security to make it easier to create custom identity objects. These include CslaIdentity and MembershipIdentity. The BusinessPrincipalBase class automatically works with these classes to implement IsInRole() functionality, dramatically reducing the code required to create a custom principal or identity class.


Unit tests (080715-C#/VB)

The cslatest project now has a dependency on UnitDriven, an open-source unit test framework that extends nunit and MSTest. UnitDriven is a spin-off effort from building CSLA Light, and is available at


The specific UnitDriven assemblies required by cslatest are part of the cslatest release download, or you can get them from CodePlex, or you can get them from svn://


IsSavable (080715-C#/VB)

Move IsSavable from IEditableBusinessObject and IEditableCollection interfaces to the ITrackStatus interface.


Data Portal (080714)

Add ObjectFactory attribute. When used on a business class, causes the data portal to create an instance of the specified factory and invoke methods on that factory rather than the normal DataPortal_XYZ methods. The factory assumes all responsibility for creating the business object and managing its state (including IsNew/IsDirty/etc.) – nothing is automatic.


The CslaObjectFactoryLoader config setting can be used to specify an IObjectFactoryLoader object that is responsible for creating the object factory objects. Alternately, the Csla.Server.DataPortalSelector.FactoryLoader property can be directly set to an instance of an IObjectFactoryLoader object, which again is responsible for creating object factory objects.


Validation (080714)

Added support for async validation rules. These rules are started along with normal rule methods, but run asynchronously. The rule method is responsible for calling back into CSLA when the rule completes, so an appropriate PropertyChanged event can be raised by the business object. The rule method is responsible for ensuring that the callback occurs on the UI thread (in WPF or Windows Forms), and for dealing with any possible threading issues in other environments (such as ASP.NET or WAS).


Silverlight Data Portal (080714)

Add a CslaMobileFactoryLoader config switch to allow an advanced user to replace the default creation of a MobileFactory object with their own approach. To do this, they need to create a class that implements IMobileFactoryLoader.


PropertyInfo (080713-C#/VB)

Remove one constructor overload: New(name, defaultValue). This ctor could be an ambiguous overload if <T> was string, so removal of this overload was necessary.

This is a breaking change for anyone using this overload.


Validation (080711)

Change the initialization of per-type business rules so an exception in AddRule() won’t leave a partially loaded rule manager object in memory. While unlikely to ever affect real application code, this problem was affecting some unit test scenarios in CSLA Light.


Project structure (080709)

Rearrange files in the DataPortal folder so they are now in folders that match their namespaces.


BusinessBase/ReadOnlyBase (080709-C#/VB)

Add missing overload of



Async Data Portal (080701)

Added a new DataPortal<T> class to provide asynchronous data portal behaviors comparable to those in CSLA Light. This also required modification of the pre-existing data portal so it no longer caches the proxy object, because the proxy objects may or may not be threadsafe.


The pre-existing data portal functionality is the same as in the past. This is not a breaking change. However, a business object or UI developer can now use the data portal in an async manner like this:


  Dim dp = New DataPortal(Of CustomerEdit)

  AddHandler dp.CreateCompleted, AddressOf dp_CreateCompleted



Private Sub dp_CreateCompleted( _

  sender As Object, e As DataPortalResult(Of CustomerEdit))


  If e.Error IsNot Nothing Then

    ' do something about exception


    ' do something with the result in e.Object

  End If


End Sub


As in Silverlight, the callback event will run on the UI thread when possible. This is automatic in WPF and Windows Forms. In other environments, such as ASP.NET, the callback event will run on a background thread.


Pre-release 3.6.0-080626:


GetProperty/SetProperty/ReadProperty/LoadProperty (080626)

Change all <P, F> overloads to include the word ‘Convert’. For example, GetProperty<P,F> is now GetPropertyConvert<P,F>. This avoids an ambiguity scenario and allows the compiler to do better type inference.

This is a breaking change for any code using the previous <P,F> overloads.


MobileFormatter (080626)

Added a MobileFormatter, which provides limited capabilities like the BinaryFormatter, but works in Silverlight and .NET. This formatter is used by the CSLA Light data portal to transfer objects to/from a .NET app server.


MobileFormatter support includes the introduction of IMobileObject, and enhancements to numerous other Serializable classes within CSLA .NET so they are able to serialize their private fields without reflection as required by the MobileFormatter.


Silverlight Data Portal (080626)

Added a CSLA Light compatible data portal host. This host is designed to listen for inbound requests from a Silverlight client running CSLA Light.


Those calls are either routed directly into the standard CSLA .NET data portal, or they are routed to a special factory/observer object defined using the new MobileFactory attribute.



(Updated 12/17/2008 3:19:12 PM)