为ORM c ++实现1到n映射

kar*_*ran 5 c++ mapping orm

我正在编写一个项目,我需要在C++中实现ORM解决方案的精简版本.我很擅长实现1-n关系.

例如,如果以下是类:

class A
{
    ...
}

class B
{
    ...
    std::list<A> _a_list;
    ...
}
Run Code Online (Sandbox Code Playgroud)

我已经提供了加载/保存方法来加载/保存到db.现在,如果我采用B的情况和以下工作流程:

  • 删除了_a_list中的1个条目
  • 来自_a_list的1个条目被修改
  • 1个条目添加到_a_list

现在,我需要使用类似"b.save()"的更新数据库.那么,保存更改的最佳方法是什么,即确定_a_list的添加,删除和更新.

Ada*_*ers 1

一种策略是使用枚举来表示记录的“状态”。IE

enum RecordState {
    RECORD_UNMODIFIED,
    RECORD_NEW,
    RECORD_CHANGED,
    RECORD_DELETED
};
Run Code Online (Sandbox Code Playgroud)

您将为每个记录提供一个 RecordState(根据情况默认为​​ RECORD _NEW / RECORD _UNMODIFIED),并且当调用 Save() 时,它将对每个记录执行适当的操作并将其状态重置为 RECORD _UNMODIFIED。删除内容在处理时将从列表中删除。