迁移引擎与种子数据
MigrationEngine
use rust_ef::migration::{MigrationEngine, MigrationDialect};
let engine = MigrationEngine::new(MigrationDialect::Sqlite);
let migration = engine.generate(
"InitialCreate",
&[Blog::entity_meta(), Post::entity_meta()],
&None, // 无前一次快照
)?;
println!("Up SQL:\n{}", migration.up_sql);
println!("Down SQL:\n{}", migration.down_sql);
种子数据
ctx.model().entity::<Blog>().has_data(&[
Blog { blog_id: 1, url: "https://seed.example".into(), rating: 5 },
]);
ctx.set::<Blog>();
ctx.ensure_created().await?; // 建表后自动插入种子数据
CLI 工具
# 添加迁移
rust-ef migration add AddUserTable --output ./Migrations
# 应用迁移
rust-ef migration apply --connection "sqlite:app.db"
# 回滚
rust-ef migration revert --connection "sqlite:app.db" --target PreviousMigration
# 生成脚本
rust-ef migration script --from InitialCreate --to AddUserTable
设计要点
| 实践 | 说明 | |------|------| | 迁移文件纳入版本控制 | 确保团队 schema 一致 | | 生产环境先备份再 apply | 迁移不可逆,Down SQL 仅用于开发回滚 | | 种子数据仅用于静态枚举 | 动态业务数据不应通过 `has_data` 插入 |
下一章:[DI 与拦截器](../10-di-interceptors/INDEX.md)