예제 #1
0
        private void CascadeActivation(IActivationContext context)
        {
            IActivationDepth depth = context.Depth();

            if (!depth.RequiresActivation())
            {
                return;
            }
            if (depth.Mode().IsDeactivate())
            {
                Container().StillToDeactivate(_transaction, context.TargetObject(), depth, false);
            }
            else
            {
                // FIXME: [TA] do we really need to check for isValueType here?
                Db4objects.Db4o.Internal.ClassMetadata classMetadata = context.ClassMetadata();
                if (classMetadata.IsStruct())
                {
                    classMetadata.CascadeActivation(context);
                }
                else
                {
                    Container().StillToActivate(context);
                }
            }
        }
예제 #2
0
        internal virtual void ActivateInternal(IActivationContext context)
        {
            if (null == context)
            {
                throw new ArgumentNullException();
            }
            if (!context.Depth().RequiresActivation())
            {
                return;
            }
            ObjectContainerBase container = context.Container();

            if (context.Depth().Mode().IsRefresh())
            {
                LogActivation(container, "refresh");
            }
            else
            {
                if (IsActive())
                {
                    _class.CascadeActivation(context);
                    return;
                }
                LogActivation(container, "activate");
            }
            ReadForActivation(context);
        }