static public bool Exec <TTrans>(object it, TFunc <TTrans> func, bool needAllTrue)
            where TTrans : class, IDataTransactionBasic
        {
            if (it == null)
            {
                return(needAllTrue);
            }

            TTrans dataTransaction = it as TTrans;

            if (dataTransaction != null)
            {
                return(func(dataTransaction));
            }
            IList list = it as IList;

            if (list == null)
            {
                return(needAllTrue);
            }

            foreach (object item in list)
            {
                //needAllTrue=true, 只要有一個是false就return false,default是return true
                //needAllTrue=false,只要有一個是true就return true,default是return false
                if (DataTransactionHelper.Exec(item, func, needAllTrue) != needAllTrue)
                {
                    return(!needAllTrue);
                }
            }
            return(needAllTrue);
        }
        public void PropagateParent(IDataTransaction parent)
        {
            Parent = parent;
            object value = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(value))
            {
                DataTransactionHelper.PropagateParent(value, parent);
            }
        }
        public void SetAsOriginal()
        {
            canRollbackOriginal = true;
            object data = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(data))
            {
                DataTransactionHelper.SetAsOriginal(data);
                return;
            }
            OriginalData = Clone(data);
        }
Ejemplo n.º 4
0
        virtual public void BeginUpdate(params object[] ids)
        {
            IDataTransactionBasic dataTa;

            if (TryGet(out dataTa))
            {
                dataTa.BeginUpdate(ownerObject as IDataTransactionBasic, ids);
                State = DataTransactionState.Begin;
                return;
            }
            DataTransactionHelper.BeginUpdate(PropertyDataPairList, ownerObject as IDataTransactionBasic, ids);
            State = DataTransactionState.Begin;
        }
Ejemplo n.º 5
0
        virtual public void CancelUpdate()
        {
            IDataTransactionBasic dataTa;

            if (TryGet(out dataTa))
            {
                dataTa.CancelUpdate();
                State = DataTransactionState.Cancel;
                return;
            }
            DataTransactionHelper.CancelUpdate(PropertyDataPairList);
            State = DataTransactionState.Cancel;
        }
        public void RollbackOriginal()
        {
            CancelUpdate();
            if (!canRollbackOriginal)
            {
                return;
            }
            object data = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(data))
            {
                DataTransactionHelper.RollbackOriginal(data);
                return;
            }
            CurrentData = OriginalData;
        }
        public void CommitUpdate()
        {
            object value = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(value))
            {
                DataTransactionHelper.CommitUpdate(value);
                State = DataTransactionState.Commit;
                return;
            }
            if (isUpdating)
            {
                oldPropertyValue = null;
                isUpdating       = false;
                OnPropertyChanged();
                State = DataTransactionState.Commit;
            }
        }
        public void BeginUpdate(IDataTransaction parent, params object[] ids)
        {
            Parent = parent;
            object value = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(value))
            {
                DataTransactionHelper.BeginUpdate(value, parent, ids);
                if (value is IList)
                {
                    Backup(value);
                }
                State = DataTransactionState.Begin;
                return;
            }
            Backup(value);

            isUpdating = true;
            State      = DataTransactionState.Begin;
        }
        public void CancelUpdate()
        {
            object value = CurrentData;

            if (DataTransactionHelper.IsDataTransactionObject(value))
            {
                DataTransactionHelper.CancelUpdate(value);
                if (value is IList)
                {
                    Restore(oldPropertyValue);
                }
                State = DataTransactionState.Cancel;
                return;
            }
            if (isUpdating)
            {
                Restore(oldPropertyValue);
                isUpdating = false;
                State      = DataTransactionState.Cancel;
            }
        }
        private bool DoValidate(object value, out ValidatingExceptionMessage exceptionMessage)
        {
            exceptionMessage = null;

            if (DataTransactionHelper.IsDataTransactionObject(value))
            {
                return(DataTransactionHelper.Validate(value, out exceptionMessage));
            }
            IDataOwner dataOwner = PropertyOwner as IDataOwner;
            bool       isPass    =
                (dataOwner != null)
                ? dataOwner.Validate(value)
                : (CustomAttribute.IsRequired)
                    ? Validate(value)
                    : true;

            if (!isPass)
            {
                exceptionMessage                   = new ValidatingExceptionMessage();
                exceptionMessage.Reference         = PropertyOwner;
                exceptionMessage.ReferenceProperty = this;
            }
            return(isPass);
        }
 static public bool IsEnumerableProperty(object value)
 {
     return(DataTransactionHelper.IsEnumerableProperty(value));
 }