コード例 #1
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Caculate average
        /// </summary>
        /// <typeparam name="TValue">Value type</typeparam>
        /// <param name="query">Query object</param>
        /// <returns>Return the average value</returns>
        public async Task <TValue> AvgAsync <TValue>(IQuery query)
        {
            var value = await ExecuteAvgAsync <TValue>(query).ConfigureAwait(false);

            //publish func event
            DataAccessEventBus.PublishAggregateFunctionEvent <TEntity>(OperateType.Avg, value, query);

            return(value);
        }
コード例 #2
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Caculate count
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data count</returns>
        public async Task <long> CountAsync(IQuery query)
        {
            var value = await ExecuteCountAsync(query).ConfigureAwait(false);

            //publish func event
            DataAccessEventBus.PublishAggregateFunctionEvent <TEntity>(OperateType.Count, value, query);

            return(value);
        }
コード例 #3
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Query data paging
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data paging</returns>
        public async Task <PagingInfo <TEntity> > GetPagingAsync(IQuery query)
        {
            var dataPaging = await ExecuteGetPagingAsync(query).ConfigureAwait(false);

            //publish query event
            DataAccessEventBus.PublishQueryEvent(query, dataPaging?.Items);

            return(dataPaging);
        }
コード例 #4
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Determine whether data is exist
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return whether does data is exist</returns>
        public async Task <bool> ExistAsync(IQuery query)
        {
            var existValue = await ExecuteExistAsync(query).ConfigureAwait(false);

            //publish check data event
            DataAccessEventBus.PublishCheckDataEvent <TEntity>(query, existValue);

            return(existValue);
        }
コード例 #5
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Query data list
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data list</returns>
        public async Task <List <TEntity> > GetListAsync(IQuery query)
        {
            var dataList = await ExecuteGetListAsync(query).ConfigureAwait(false);

            //publish query event
            DataAccessEventBus.PublishQueryEvent(query, dataList);

            return(dataList);
        }
コード例 #6
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Delete data
        /// </summary>
        /// <param name="query">Query</param>
        /// <returns>Return command</returns>
        public ICommand Delete(IQuery query)
        {
            var command = ExecuteDeleteByCondition(query);

            //publish delete by condition event
            DataAccessEventBus.PublishDeleteByCondition <TEntity>(query);

            return(command);
        }
コード例 #7
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Delete data
        /// </summary>
        /// <param name="data">Data</param>
        /// <returns>Return command</returns>
        public ICommand Delete(TEntity data)
        {
            var command = ExecuteDeleteData(data);

            //publish delete data event
            DataAccessEventBus.PublishDeleteEvent(data, data.GetPrimaryKeyValues());

            return(command);
        }
コード例 #8
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Add data
        /// </summary>
        /// <param name="data">Data</param>
        /// <returns>Return command</returns>
        public ICommand Add(TEntity data)
        {
            InitVersionFieldValue(data);     //init version field value
            InitRefreshDateFieldValue(data); //init refresh date value
            var command = ExecuteAdd(data);

            //publish add event
            DataAccessEventBus.PublishAddEvent(data, data.GetAllValues());

            return(command);
        }
コード例 #9
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Query data
        /// </summary>
        /// <param name="query">Query object</param>
        /// <returns>Return data</returns>
        public async Task <TEntity> GetAsync(IQuery query)
        {
            var data = await ExecuteGetAsync(query).ConfigureAwait(false);

            //publish query event
            DataAccessEventBus.PublishQueryEvent(query, new TEntity[1] {
                data
            });

            return(data);
        }
コード例 #10
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// Modify data
        /// </summary>
        /// <param name="newData">New data</param>
        /// <param name="oldData">Old data</param>
        /// <param name="query">Query object</param>
        /// <returns>Return command</returns>
        public ICommand Modify(TEntity newData, TEntity oldData, IQuery query)
        {
            Dictionary <string, dynamic> modifyValues = newData.GetModifyValues(oldData);

            if (modifyValues == null || modifyValues.Count < 1)
            {
                return(null);
            }
            if (query == null)
            {
                throw new EZNEWException("The data modification condition is null");
            }

            #region control version

            string versionFieldName = EntityManager.GetVersionField(entityType);
            if (!string.IsNullOrWhiteSpace(versionFieldName))
            {
                var nowVersionValue = newData.GetValue(versionFieldName);
                if (!modifyValues.ContainsKey(versionFieldName))
                {
                    var newVersionValue = nowVersionValue + 1;
                    newData.SetValue(versionFieldName, newVersionValue);
                    modifyValues.Add(versionFieldName, newVersionValue);
                }
                query = AndExtensions.And(query, versionFieldName, CriteriaOperator.Equal, nowVersionValue);
            }

            #endregion

            #region refresh date

            string refreshFieldName = EntityManager.GetRefreshDateField(entityType);
            if (!string.IsNullOrWhiteSpace(refreshFieldName))
            {
                if (!modifyValues.ContainsKey(refreshFieldName))
                {
                    var nowDate = DateTimeOffset.Now;
                    newData.SetValue(refreshFieldName, nowDate);
                    modifyValues.Add(refreshFieldName, nowDate);
                }
            }

            #endregion

            var originValues = oldData.GetAllValues();
            var command      = ExecuteModifyData(originValues, modifyValues, query);

            //publish modify data event
            DataAccessEventBus.PublishModifyDataEvent <TEntity>(originValues, modifyValues, query);

            return(command);
        }
コード例 #11
0
ファイル: BaseDataAccess.cs プロジェクト: eznew-net/EZNEW
        /// <summary>
        /// edit data with expression
        /// </summary>
        /// <param name="modifyExpression">modify expression</param>
        /// <param name="query">Query object</param>
        /// <returns>ICommand object</returns>
        public ICommand Modify(IModify modifyExpression, IQuery query)
        {
            Dictionary <string, IModifyValue> fieldAndValues = modifyExpression.GetModifyValues();

            if (fieldAndValues == null || fieldAndValues.Count <= 0)
            {
                return(null);
            }

            #region control version

            string versionFieldName = EntityManager.GetVersionField(typeof(TEntity));
            if (!string.IsNullOrWhiteSpace(versionFieldName))
            {
                if (!fieldAndValues.ContainsKey(versionFieldName))
                {
                    fieldAndValues.Add(versionFieldName, new CalculateModifyValue(CalculateOperator.Add, 1));
                }
            }

            #endregion

            #region update date

            string refreshFieldName = EntityManager.GetRefreshDateField(typeof(TEntity));
            if (!string.IsNullOrWhiteSpace(refreshFieldName))
            {
                if (!fieldAndValues.ContainsKey(refreshFieldName))
                {
                    fieldAndValues.Add(refreshFieldName, new FixedModifyValue(DateTimeOffset.Now));
                }
            }

            #endregion

            var command = ExecuteModifyExpression(fieldAndValues, query);

            //publish modify expression event
            DataAccessEventBus.PublishModifyExpressionEvent <TEntity>(fieldAndValues, query);

            return(command);
        }
コード例 #12
0
ファイル: DefaultWork.cs プロジェクト: eznew-net/EZNEW
 /// <summary>
 /// Trigger data access event
 /// </summary>
 /// <returns></returns>
 void TriggerDataAccessEvent()
 {
     DataAccessEventBus.TriggerDataAccessEvent(dataAccessEventCollection);
 }
コード例 #13
0
        /// <summary>
        /// 配置数据访问事件
        /// </summary>
        static void ConfigureDataAccessEvent()
        {
            //all event
            DataAccessEventBus.SubscribeAll(e =>
            {
                Console.WriteLine($"执行了数据操作,事件编号:{e.Id},时间:{e.TriggerDate.ToString()},操作对象:{e.EntityType.FullName},事件类型:{e.GetType().FullName}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //add event
            DataAccessEventBus.SubscribeAdd(addEvent =>
            {
                Console.WriteLine($"添加数据:{addEvent.EntityType.FullName}");
                return(DataAccessEventExecuteResult.EmptyResult());
            }, true, typeof(UserEntity));

            //update event
            DataAccessEventBus.SubscribeUpdate(updateEvent =>
            {
                Console.WriteLine($"修改数据:{updateEvent.EntityType.FullName},修改值:{string.Join(",", updateEvent.NewValues.Keys)}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //modify expression
            DataAccessEventBus.SubscribeModifyExpression(e =>
            {
                Console.WriteLine($"修改表达式事件:{e.EntityType.FullName},修改值:{string.Join(",", e.ModifyValues.Keys)}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //delete event
            DataAccessEventBus.SubscribeDelete(e =>
            {
                Console.WriteLine($"删除数据:{e.EntityType.FullName},对象标识值:{string.Join(",", e.KeyValues.Keys)}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //delete by condition
            DataAccessEventBus.SubscribeDeleteByCondition(e =>
            {
                Console.WriteLine($"根据条件删除数据:{e.EntityType.FullName},条件:{string.Join(",", e.Query.AllConditionFieldNames)}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //query event
            DataAccessEventBus.SubscribeQuery(e =>
            {
                Console.WriteLine($"查询数据:{e.EntityType.FullName},条件:{string.Join(",", e.Query.AllConditionFieldNames)}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //check value
            DataAccessEventBus.SubscribeCheckData(e =>
            {
                Console.WriteLine($"查询数据是否存在:{e.EntityType.FullName},是否拥有值:{e.HasValue}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            //agg func
            DataAccessEventBus.SubscribeAggregateFunction(e =>
            {
                Console.WriteLine($"执行聚合函数:{e.EntityType.FullName},函数:{e.OperateType},返回值:{e.Value}");
                return(DataAccessEventExecuteResult.EmptyResult());
            });

            DataAccessEventBus.Subscribe <QueryDataEvent>(new CustomQueryHandler());
        }