Example #1
0
        /// <summary>
        /// 保存实体数据
        /// </summary>
        /// <typeparam name="TEntity">实体类型</typeparam>
        /// <param name="p_entity">待保存的实体</param>
        /// <returns>是否成功</returns>
        public async Task <bool> Save <TEntity>(TEntity p_entity)
            where TEntity : Entity
        {
            Throw.If(p_entity == null || (!p_entity.IsAdded && !p_entity.IsChanged), _unchangedMsg);

            var model = EntitySchema.Get(typeof(TEntity));

            if (model.OnSaving != null)
            {
                await(Task) model.OnSaving.Invoke(p_entity, null);
            }

            Dict dt = model.Schema.GetSaveSql(p_entity);

            if (await _db.Exec((string)dt["text"], (Dict)dt["params"]) != 1)
            {
                return(false);
            }

            // 实体事件
            GatherSaveEvents(p_entity, model);

            // 更新实体时删除缓存
            if (model.CacheHandler != null && !p_entity.IsAdded && p_entity.IsChanged)
            {
                await model.CacheHandler.Remove(p_entity);
            }

            p_entity.AcceptChanges();
            return(true);
        }
Example #2
0
        /// <summary>
        /// 一个事务内执行多个Sql
        /// </summary>
        /// <param name="p_dts">参数列表,每个Dict中包含两个键:text,params,text为sql语句params类型为Dict或List{Dict}</param>
        /// <returns>返回执行后影响的行数</returns>
        public async Task <int> BatchExec(List <Dict> p_dts)
        {
            if (p_dts == null || p_dts.Count == 0)
            {
                return(0);
            }

            MySqlAccess db = new MySqlAccess();

            try
            {
                int cnt = 0;
                await db.BeginTrans();

                foreach (Dict dt in p_dts)
                {
                    string sql = (string)dt["text"];
                    if (dt["params"] is List <Dict> ls)
                    {
                        foreach (var par in ls)
                        {
                            cnt += await db.Exec(sql, par);
                        }
                    }
                    else if (dt["params"] is Dict par)
                    {
                        cnt += await db.Exec(sql, par);
                    }
                }
                await db.CommitTrans();

                return(cnt);
            }
            catch
            {
                await db.RollbackTrans();

                throw;
            }
        }