|
|
Delphi 中有几个类似 FreeSql ORM 的选择:
## Delphi ORM 框架对比
| 框架 | 类型 | 特点 |
|------|------|------|
| **mORMot 2** | 开源免费 | 功能最强大,支持 CodeFirst、Repository、REST API |
| **TMS Aurelius** | 商业付费 | 完整 ORM,类似 Entity Framework |
| **DORM** | 开源免费 | 轻量级,类似 Hibernate |
| **FireDAC** | 内置 | 数据访问层,非完整 ORM |
## 当前项目的做法
当前项目使用的是 **FireDAC + 手动 Repository 模式**,这是一种轻量级方案:
```pascal
// 当前实现方式 - 简化的仓储
TSimpleRepository<T: class> = class(TInterfacedObject, IBaseRepository<T>)
function Where(APredicate: TFunc<T, Boolean>): TList<T>;
function ToList: TList<T>;
procedure Insert(AEntity: T);
procedure Update(AEntity: T);
// ...
end;
```
对于当前项目,**继续使用 FireDAC + 手动 SQL** 是最简单的方案,因为:
1. **不需要引入额外依赖** - FireDAC 已内置
2. **表结构已固定** - C# 版本的表是预先创建的,不需要 CodeFirst
3. **查询不复杂** - 大部分是简单的 CRUD 操作
如果将来想要完整的 ORM 功能(自动映射、延迟加载、LINQ 风格查询),可以考虑集成 **mORMot 2**,它是开源的且功能与 FreeSql 最接近。
**当前项目的实际用法示例:**
```pascal
// 直接使用 SQL 查询
var Qry := TDBInit.Query('SELECT * FROM OtherConfig WHERE FNodeID = ' + IntToStr(NodeID));
// 或使用 Execute 执行
TDBInit.Execute('INSERT INTO OtherConfig (FNodeID, ConfigIndex) VALUES (1, 0)');
```
这种方式虽然没有完整 ORM 方便,但足够满足当前需求,且代码清晰易维护。
|
|