/// <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); }
/// <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; } }