RemoveRange 与 LoadAll

RemoveRange

标记多个已加载的实体为 `Deleted`:

let mut set = ctx.set::<Blog>();
let to_remove = set.query()
    .filter(linq!(|b: Blog| b.rating < 2))
    .to_list().await?;

set.remove_range(&to_remove);
ctx.save_changes().await?;

> `remove_range` 要求实体实现 `PartialEq`,按值匹配定位条目。

LoadAll

将全表数据加载到 `DbSet` 中,全部标记为 `Unchanged`:

let mut set = ctx.set::<Blog>();
set.load_all().await?;  // 全部 attach 为 Unchanged

// 现在可以遍历并修改
for blog in set.tracked_entries_mut() {
    blog.rating += 1;
}
ctx.save_changes().await?;  // 自动检测所有修改

设计要点

| 实践 | 说明 | |------|------| | `remove_range` 适合小批量 | 大数据量直接用 `execute_delete()` | | `load_all` 适合全表更新场景 | 如批量计算评分、同步状态 | | 加载前 `clear_entries()` | `load_all` 内部已调用,无需手动处理 |

下一章:[事务与迁移](../09-transactions-migrations/INDEX.md)