是/可以/应该亚音速本地处理数据库冲突?

时间:2011-03-07 22:39:59

标签: subsonic3 data-access-layer collision-detection

我最近选择使用SubSonic在一个新的vb.net windows app项目中使用,到目前为止我真的很喜欢它!它是一个完美的开始,并以某种方式编写,使用t4模板,这使得它可以自定义。

无论如何,我正在使用Active record和MySql。我有一个表单,其控件使用bindingsource数据绑定到亚音速数据类。 当我:

  1. 在表格中进行一些更改

  2. 还使用MySql工作台更改db表中的数据,然后

  3. 通过表单

  4. 保存更改

    我没有得到数据冲突的警告/通知? 通过调用亚音速数据类

    上的Save()来覆盖工作台更改

    这可能不是亚音速的特征还是我做错了? 如果不是,我将添加到模板中的保存代码,以便我:

    1. 加载新记录

    2. 将现有记录的时间戳与新记录的时间戳进行比较

    3. 比较每个字段的数据并构建一组更改

    4. 使用eventargs中的更改集合引发事件,以便我可以让用户决定要做什么。

    5. 如果它已经完成,我不想这样做,那就是全部。

1 个答案:

答案 0 :(得分:0)

  

我没有得到任何警告/通知   数据冲突?工作台改变了   通过调用Save()来覆盖   亚音速数据类

     

这可能不是亚音速的特征   还是我做错了什么?

SubSonic中没有乐观的并发功能。此外,它还不是“尚未”,它是“时期” - 在SubSonic项目中没有发生重大的发展,并且有什么发展围绕支持Oracle(一个长期未实现的目标)。

  

如果没有,我将添加到保存代码中   模板

我将建议您放弃SubSonic并开始学习具有更强大功能的不同数据访问工具(如Entity Framework或NHibernate)将更有效。这可能不是您遇到SubSonic的最后一个限制。

  

如果没有,我将添加到保存代码中   模板,以便我:

     
      
  1. 加载新记录

  2.   
  3. 将现有记录的时间戳与新记录的时间戳进行比较

  4.   
  5. 比较每个字段的数据并构建一组更改

  6.   
  7. 使用eventargs中的更改集合引发事件,以便我可以让用户决定要做什么。

  8.   

首先加载记录的新副本是不必要的低效率。更好的替代方法是在timestamp列的更新中添加where子句,以便只有在主键和时间戳列都匹配时才会发生更新。您可以通过检查受影响的记录计数以这种方式检测并发冲突。如果受影响的记录计数为零,则记录已更新或删除,然后您可以加载副本并开始解决冲突。