/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
/// <summary> /// Trigger data access event /// </summary> /// <returns></returns> void TriggerDataAccessEvent() { DataAccessEventBus.TriggerDataAccessEvent(dataAccessEventCollection); }
/// <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()); }