/// <summary> /// Remove Objects /// </summary> /// <param name="entityList">datas</param> protected async Task RemoveAsync(IEnumerable <ET> entityList) { Type entityType = typeof(ET); var keys = QueryConfig.GetPrimaryKeys(entityType); if (keys.IsNullOrEmpty()) { throw new Exception(string.Format("Type:{0} isn't set primary keys", entityType.FullName)); } IQuery query = QueryFactory.Create(); List <dynamic> keyValueList = new List <dynamic>(); foreach (ET entity in entityList) { if (keys.Count == 1) { keyValueList.Add(entity.GetPropertyValue(keys.ElementAt(0))); } else { IQuery entityQuery = QueryFactory.Create(); foreach (var key in keys) { entityQuery.And(key, CriteriaOperator.Equal, entity.GetPropertyValue(key)); } query.Or(entityQuery); } } if (keys.Count == 1) { query.In(keys.ElementAt(0), keyValueList); } UnitOfWork.UnitOfWork.RegisterCommand(await dataAccess.DeleteAsync(query).ConfigureAwait(false)); }
/// <summary> /// set command values /// </summary> /// <param name="cmd">command</param> /// <param name="values">values</param> void SetCommand(ICommand cmd, Dictionary <string, dynamic> values = null) { if (cmd == null) { return; } Type type = typeof(T); //对象名称 cmd.ObjectName = QueryConfig.GetObjectName(type); #region 主键值 var primaryKeys = QueryConfig.GetPrimaryKeys(type); cmd.ObjectKeys = primaryKeys; if (primaryKeys != null && values != null && values.Count > 0) { SortedDictionary <string, dynamic> primaryValues = new SortedDictionary <string, dynamic>(); foreach (var key in primaryKeys) { if (values.ContainsKey(key)) { primaryValues.Add(key, values[key]); } } cmd.ObjectKeyValues = primaryValues; } #endregion }
/// <summary> /// get object primary key value /// </summary> /// <returns></returns> internal Dictionary <string, dynamic> GetPrimaryKeyValues() { var primaryKeys = QueryConfig.GetPrimaryKeys(typeof(T)); if (primaryKeys == null || primaryKeys.Count <= 0) { return(new Dictionary <string, dynamic>(0)); } Dictionary <string, dynamic> values = new Dictionary <string, dynamic>(primaryKeys.Count); foreach (var key in primaryKeys) { if (valueDic.ContainsKey(key)) { values.Add(key, valueDic[key]); } } return(values); }
/// <summary> /// Modify Objects /// </summary> /// <param name="datas">datas</param> protected async Task ModifyAsync(params ET[] datas) { Type entityType = typeof(ET); var keys = QueryConfig.GetPrimaryKeys(entityType); if (keys.IsNullOrEmpty()) { throw new Exception(string.Format("Type:{0} is not set primary keys", entityType.FullName)); } foreach (var data in datas) { IQuery query = QueryFactory.Create(); foreach (var key in keys) { query.Equal(key, data.GetPropertyValue(key)); } UnitOfWork.UnitOfWork.RegisterCommand(await dataAccess.ModifyAsync(data, query).ConfigureAwait(false)); } }
/// <summary> /// Execute Remove /// </summary> /// <param name="query">query model</param> protected virtual async Task ExecuteRemoveAsync(IQuery query) { if (query == null) { query = QueryFactory.Create(); } Type entityType = typeof(ET); var keys = QueryConfig.GetPrimaryKeys(entityType); if (keys.IsNullOrEmpty()) { throw new Exception(string.Format("Type:{0} isn't set primary keys", entityType.FullName)); } var dataList = GetList(query); if (dataList == null || dataList.Count <= 0) { return; } await RemoveAsync(dataList.ToArray()).ConfigureAwait(false); }
/// <summary> /// get primary keys with cache /// </summary> /// <returns></returns> public string GetPrimaryCacheKey(bool includeObjectName = true) { SortedSet <string> primaryKeys = QueryConfig.GetPrimaryKeys(typeof(T)); return(GenerateCacheKey(primaryKeys, includeObjectName)); }