public void ObjectChanged(INakedObject nakedObject, ILifecycleManager lifecycleManager, IMetamodelManager metamodel)
        {
            Log.DebugFormat("ObjectChanged nakedObject: {0}", nakedObject);
            if (nakedObject.ResolveState.RespondToChangesInPersistentObjects())
            {
                if (nakedObject.Spec.ContainsFacet(typeof(IComplexTypeFacet)))
                {
                    nakedObject.Updating();
                    nakedObject.Updated();
                }
                else
                {
                    ITypeSpec spec = nakedObject.Spec;
                    if (spec.IsAlwaysImmutable() || (spec.IsImmutableOncePersisted() && nakedObject.ResolveState.IsPersistent()))
                    {
                        throw new NotPersistableException("cannot change immutable object");
                    }
                    nakedObject.Updating();
                    objectStore.ExecuteSaveObjectCommand(nakedObject);
                    nakedObject.Updated();
                }
            }

            if (nakedObject.ResolveState.RespondToChangesInPersistentObjects() ||
                nakedObject.ResolveState.IsTransient())
            {
            }
        }
        public void ObjectChanged(INakedObjectAdapter nakedObjectAdapter, ILifecycleManager lifecycleManager, IMetamodelManager metamodel)
        {
            if (nakedObjectAdapter.ResolveState.RespondToChangesInPersistentObjects())
            {
                if (nakedObjectAdapter.Spec.ContainsFacet(typeof(IComplexTypeFacet)))
                {
                    nakedObjectAdapter.Updating();
                    nakedObjectAdapter.Updated();
                }
                else
                {
                    var spec = nakedObjectAdapter.Spec;
                    if (spec.IsAlwaysImmutable() || spec.IsImmutableOncePersisted() && nakedObjectAdapter.ResolveState.IsPersistent())
                    {
                        throw new NotPersistableException(logger.LogAndReturn("cannot change immutable object"));
                    }

                    nakedObjectAdapter.Updating();

                    if (!spec.IsNeverPersisted())
                    {
                        objectStore.ExecuteSaveObjectCommand(nakedObjectAdapter);
                    }

                    nakedObjectAdapter.Updated();
                }
            }

            if (nakedObjectAdapter.ResolveState.RespondToChangesInPersistentObjects() ||
                nakedObjectAdapter.ResolveState.IsTransient())
            {
            }
        }