/// <summary>
        /// 登錄到記憶體中
        /// </summary>
        /// <param name="entityTable"></param>
        public void Regist(EntityTable entityTable, OPStatus opStatus)
        {
            //if (entityTable == null) return;
            if (entityTable == null || (opStatus == OPStatus.Steady && entityTable.HasCollectionChangedEventSubscriber()))
            {
                return;
            }
            if (opStatus.IsPassSchema())
            {
                entityTable.GetAttributesEntity().Status = opStatus;
                updatingTables[GenKey(entityTable, true)] = entityTable;
                return;
            }

            //if(HasCollectionChangedEventSubscriber())
            var attris = entityTable.GetAttributesEntity();

            attris.Status = opStatus;
            entityTable.CollectionChanged -= OnTableCollectionChanged;
            entityTable.CollectionChanged += OnTableCollectionChanged;
            //Comment out: 每次因EntityTable的rows可能數量不同,有的是部分
            //if (!attris.IsPartial&&updatingTables.ContainsKey(GenKey(entityTable)))
            //    return;
            Action <EntityRow> action = delegate(EntityRow row)
            {
                var attribute = row.GetAttributesEntity();
                //attribute.Status = opStatus;
                row.PropertyChanged -= OnRowChanged;
                row.PropertyChanged += OnRowChanged;
            };
            EntityTable registedTable = TakeRegistedTable(entityTable);

            entityTable.Rows.ForEach(row => { action(row); DoRegist(registedTable, row, opStatus); });
        }
        private void DoRegist(EntityTable registedTable, EntityRow row, OPStatus opStatus)
        {
            IEntityRowAttributes rowAttributes = row.GetAttributesEntity();
            bool isExist       = registedTable.Rows.Contains(row);
            bool inTransaction = (State == DataTransactionState.Begin);

            switch (opStatus)
            {
            case OPStatus.Delete:
                if (isExist)
                {
                    registedTable.Rows.Remove(row);
                }
                if (rowAttributes.Status == OPStatus.Add)
                {
                    UnregistRowTransaction(row);
                }
                else
                {
                    RegistRowTransaction(row, true);
                    rowAttributes.Status = opStatus;
                }
                break;

            case OPStatus.Add:
                if (!isExist)
                {
                    registedTable.Rows.Add(row);
                }
                RegistRowTransaction(row, false);
                rowAttributes.Status = opStatus;
                break;

            case OPStatus.Update:
                if (rowAttributes.Status != OPStatus.Add && rowAttributes.Status != OPStatus.Delete)
                {
                    rowAttributes.Status = opStatus;
                    //100/11/30 by Feng,避免已經BeginUpdate後才又有Table被查詢regist
                    RegistRowTransaction(row, true);
                }
                break;

            case OPStatus.Steady:
                if (!isExist)
                {
                    rowAttributes.Status = opStatus;
                    registedTable.Rows.Add(row);
                    RegistRowTransaction(row, true);
                }
                break;

            default:
                throw new Exception("EntityTableTransaction.Regist()");
            }
        }
        private Task UpdateTriggerCode(int logId, OPStatus triggerCode, string triggerMessage)
        {
            _taskExecutor.Execute(async(state) =>
            {
                AixScheduleTaskLog log = new AixScheduleTaskLog
                {
                    Id             = logId,
                    TriggerCode    = (int)triggerCode,
                    TriggerMessage = StringUtils.SubString(triggerMessage, _options.LogResultMessageMaxLength > 0 ? _options.LogResultMessageMaxLength : 500),
                    ModifyTime     = DateTime.Now
                };
                await _aixScheduleTaskLogRepository.UpdateAsync(log);
            }, null);

            return(Task.CompletedTask);
        }
 public void Reregist(EntityTable entityTable, OPStatus opStatus)
 {
     Unregist(entityTable, false);
     Regist(entityTable, opStatus);
 }
        public void Regist(EntityTable srcTable, EntityRow row, OPStatus opStatus)
        {
            EntityTable registedTable = TakeRegistedTable(srcTable);

            DoRegist(registedTable, row, opStatus);
        }
Beispiel #6
0
 /// <summary>
 /// 當屬於Table的OP操作, it>OPStatus.Add的動作只傳遞Schem不傳table內容
 /// </summary>
 static public bool IsPassSchema(this OPStatus it)
 {
     return(it > OPStatus.Add);
 }