我正在用 C# 编写一个简单的代码生成器,用于自动执行业务应用程序中的常见任务,例如数据绑定、模型和视图模型生成以及记录更新。
生成的代码使用一个数据映射器,该映射器通过引用比较(没有 id)实现相等性,并为瞬态状态标记属性(如果对象已创建但未持久化)。
为了更新对象属性,我有 3 个选项:
在属性设置器上,仅立即为一列调用 UPDATE。这将提供即时持久性,而无需最终程序员管理的任何其他机制,但它将需要和不必要的 UPDATE 调用次数
在所有实体上保持冻结状态,这将阻止任何属性集,以及 BeginModification 和 EndModification 方法,这将启用属性设置器并更新 EndModification 上的所有修改列。这需要程序员调用此方法,这对于代码生成器来说是不可取的,因为代码简单和减少程序员干预是其主要目标
为每个实体维护一个计时器(可以实现为全局计时器和本地计数器),并为实体提供一定的“脏时间”,当设置属性时,其脏时间重置为 0 并且当其本地时钟到达时某些值,将进行列更新。这不需要任何外部最终程序员代码,并且可以在单个 UPDATE 上对多个属性集进行分组,因为连续属性集之间的时间几乎为 0。
计时器方法可以与 CommitChanges 方法结合使用,如果需要,该方法将立即调用 UPDATE
我首选的方法是本地脏计时器,因为除了属性集之外零程序员干预的可能性,问题是:这种计时器方法可能会导致数据不一致吗?