【问题标题】:Does/Can/Should subsonic natively handle database collisions?是否/可以/应该亚音速本机处理数据库冲突?
【发布时间】:2011-03-07 22:39:59
【问题描述】:

我最近在一个新的 vb.net windows 应用程序项目中使用了 SubSonic,到目前为止我真的很喜欢它!它是一个完美的开始,并以某种方式编写,使用 t4 模板,这使它对定制敞开大门。

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

  1. 对表单进行一些更改

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

  3. 通过表单保存更改

我没有收到数据冲突的警告/通知? 通过在亚音速数据类上调用 Save() 覆盖工作台更改

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

  1. 加载新的记录副本

  2. 比较现有记录的时间戳和新记录的时间戳

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

  4. 引发一个事件,并在 eventargs 中包含更改集合,以便我可以让用户决定要做什么。

如果它已经完成,我不想这样做,仅此而已。

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

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

    1. 加载新的记录副本

    2. 比较现有记录的时间戳和新记录的时间戳

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

    4. 引发一个事件,并在 eventargs 中包含更改集合,以便我可以让用户决定要做什么。

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

    【讨论】:

    • 感谢 qes,关于并发冲突的输入,肯定会朝那个方向发展。我还没准备好放弃亚音速,因为我在这个网站上读到一个问题“亚音速死了吗”,Rob 给出了一个非常令人信服的答案。
    • 它不会死,它会做它该做的事。它具有的功能是完全可用的。但是您不会在并发或管理对象之间的关系方面找到太多帮助,并且可能不会添加此类新功能。正如 Rob 所说,它是一个查询工具,而不是 ORM。
    猜你喜欢
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多