OperateResultModel 类
典型的通用操作结果模型,常用于Web 开发、API 设计和前后端交互,主要作用如下:
-
统一接口返回格式:为所有操作提供一致的响应结构
-
传递操作状态 :通过
success
字段表示操作是否成功 -
携带操作消息 :通过
msg
字段传递错误信息或成功提示 -
返回操作数据 :通过
rows
/data 字段返回查询结果或操作对象 -
支持分页查询 :包含分页相关的字段(
total
,page
,pagesize
等)
使用场景
- API 响应:作为 RESTful API 的标准返回格式
- AJAX 请求:前端通过 AJAX 获取数据时的标准响应格式
- 分页查询:在需要分页的列表查询中返回分页信息
- 通用操作结果:增删改查CURD等各种操作的统一返回格式
Tuple 类
Tuple
(元组)是一种轻量级的数据结构,用于将多个值组合成一个单一对象,主要作用如下**:**
-
基础操作结果 Tuple 结构:(bool Success, string Message)
-
带数据的操作结果 Tuple 结构:(bool Success, T Data, string Message)
-
分页查询结果 Tuple 结构:(bool Success, List<T> Data, int Total, string Message)
-
扩展分页 Tuple 结构(含页码参数):(bool Success, List<T> Data, int Total, int Page, int PageSize, string Message)
-
命名元组(增强语义可读性):(bool IsSuccess, T ResultData, int TotalCount, string ErrorMessage)
使用场景
1.临时数据结构:不需要在多处重用的简单数据
2.方法返回值:快速返回多个值,无需创建专门的类
3.LINQ 查询:简化投影结果
4.轻量级需求:不需要复杂的行为或属性
Tuple 模型与原 OperateResultModel 的核心对应关系
原模型字段 | Tuple 元素 | 作用 |
---|---|---|
success |
Success /IsSuccess |
标识操作成功与否(布尔值) |
msg |
Message /ErrorMessage |
传递操作提示或错误信息 |
rows /data |
Data /ResultData |
返回查询结果或操作对象(泛型) |
total |
Total /TotalCount |
分页总记录数 |
page /pagesize |
Page /PageSize |
分页参数(当前页、页大小) |
示例:替换 OperateResultModel
假设原有代码:
csharp
public class OperateResultModel {
public bool success { get; set; }
public object data { get; set; }
public string msg { get; set; }
}
public OperateResultModel CreateSignFlow(...) {
// 业务逻辑...
OperateResultModel orm = new OperateResultModel();
orm.success = true,
orm.data = new SysSignJumpModel(),
orm.msg = "创建成功"
};
}
使用 Tuple 后:
csharp
public Tuple(bool Success, SysSignJumpModel Data, string Message) CreateSignFlow(...) {
// 业务逻辑...
return new Tuple(true, new SysSignJumpModel(), "创建成功");
}
调用时:
csharp
Tuple<bool, model, string> ret = headBll.CreateSignFlow(headmodel);
if (success) {
// 使用 model...
orm.success = ret.Item1;
orm.rows = ret.Item2;
orm.msg = ret.Item3;
}
else
{
orm.msg = "[]";//空字符串,null
orm.success = false;
}
}
catch (Exception ex)
{
orm.msg = ex.Message;
orm.success = false;
}
return JsonResultHelper.Convert(orm);
}
SQLSugar 中 ExecuteCommand () 的三种返回值处理方式
在 SQLSugar ORM 框架中,.ExecuteCommand()
方法用于执行 SQL 命令并返回受影响的行数。这三种处理方式的区别在于对返回值的判断逻辑:
ExecuteCommand()
- 返回值类型 :
int
(受影响的行数) - 用途:获取实际影响的记录数,不做条件判断
- 适用场景 :
- 需要知道具体删除 / 更新了多少条记录
- 后续逻辑依赖于具体的行数(如批量操作统计)
csharp
// 示例:获取实际删除的记录数
int deletedCount = db.Deleteable<TbUserRoleBodyModel>()
.Where(t => t.ORDERNO == "ORD2023001")
.ExecuteCommand();
// 后续使用 deletedCount 进行统计或日志记录
ExecuteCommand() == 1
- 返回值类型 :
bool
(是否恰好删除 / 更新 1 条) - 用途 :确保操作只影响了单条记录
- 适用场景 :
- 删除 / 更新唯一记录(如主键查询)
- 业务规则要求必须且只能修改一条记录
csharp
// 示例:删除特定订单(必须存在且只能存在一条)
bool success = db.Deleteable<TbUserRoleHeadModel>()
.Where(t => t.ORDERNO == "ORD2023001")
.ExecuteCommand() == 1;
// 如果没有记录或删除多条,都会返回 false
ExecuteCommand() > 0
- 返回值类型 :
bool
(是否删除 / 更新至少 1 条) - 用途 :确保操作至少影响了一条记录
- 适用场景 :
- 批量删除 / 更新(不确定具体数量)
- 业务规则允许删除多条记录(如删除订单下的所有明细)
csharp
// 示例:删除订单下的所有明细(可能有0~N条)
bool success = db.Deleteable<TbUserRoleBodyModel>()
.Where(t => t.ORDERNO == "ORD2023001")
.ExecuteCommand() > 0;
// 删除0条返回 false,删除1~N条返回 true
实际应用对比
场景 1:删除用户唯一配置
csharp
// 必须恰好删除1条(用户配置必须存在且唯一)
bool success = db.Deleteable<ParamsTbModel>()
.Where(p => p.USER_ID == userId && p.KEY == "NOTIFICATION_SETTING")
.ExecuteCommand() == 1;
场景 2:删除订单下的所有明细
csharp
// 可能删除0~N条(订单可能没有明细)
bool success = db.Deleteable<TbOrderDetail>()
.Where(d => d.ORDER_ID == orderId)
.ExecuteCommand() > 0;
注意事项
-
性能差异:
- 直接使用
ExecuteCommand()
性能最优(无需额外判断) == 1
和> 0
会增加一次比较操作
- 直接使用
-
业务逻辑风险:
- 使用
== 1
时,如果记录不存在或存在多条,会返回false
- 使用
> 0
时,如果记录不存在,会返回false
- 使用
-
并发问题:
- 在高并发场景下,建议使用事务或乐观锁
- 避免在删除前查询记录数(可能导致脏读)