我想在内存中发布一些子行,然后有条件地发布它们,或者不将它们发布到底层 SQL 数据库,具体取决于是否发布了父行。我不需要完整的 ORM,但也许只是这样:
- 用户单击添加医生。添加医生对话框打开。
- 在添加医生上单击确定之前,在添加医生对话框中,用户添加一名或多名仅保留在内存中的患者。
- 用户在添加医生窗口中单击确定。现在所有的病人都被存储了,加上新的医生。
- 如果用户在医生窗口单击取消,则所有医生和患者信息都将被丢弃。
如果您愿意,请尝试想象您如何使用 delphi 数据感知控件和 TADOQuery 或其他 ADO 对象来完成上述操作。如果有一种非 ADO 特定的方法来执行此操作,我也对此感兴趣,我只是将 ADO 扔在那里,因为我碰巧在我当前的应用程序中使用 MS-SQL Server 和 ADO。
因此,在我工作过一段时间的以前的雇主那里,他们有一个名为的类TMasterDetail
,专门用于将上述内容添加到 ADO 记录集中。它有时有效,有时却以一些非常有趣且难以修复的方式失败。
VCL 中是否有任何内置的东西,或者任何第三方组件具有执行此技术的稳健方式?如果不是,我在上面所说的是否需要 ORM?我认为 ORM 被很多人认为是“坏的”,但以上是一种非常自然的 UI 模式,可能会出现在百万个应用程序中。如果我使用的是非 ADO 非 Delphi-db-dataset 工作方式,那么在我可能编写的几乎任何持久层中,上述内容都不会成为问题,但是当具有使用标识值链接的主键的数据库时主行和详细行进入图片,事情变得复杂。
更新:在这种情况下,交易并不理想。(提交/回滚对于我的目的来说是一种过于粗糙的机制。)