Rocky,
I noticed that you've added code in BusinessListBase.IsSavable property to see if a user has authorization to edit the object, and assigned that to a local variable, but on the return statement, you call IsDirty and IsValid first. With short circuting, you'd have better performance if auth is false, if you changed from this:
return (IsDirty && IsValid && auth && !IsBusy);
to:
return (auth && IsDirty && IsValid && !IsBusy);
If auth is false, you'd never have to loop through all the objects twice for IsDirty and IsValid
Copyright (c) Marimer LLC