问题:
数据集的结构与上面表结构相同,也句含Order,Details
两个表通过orderid作为外键相联
两个表对应的数据适配器分别为:sqlAdapter1,sqlAdapter2
问题是这样的:
当我对数据集中的Order的orderid修改时,Details的orderid也自动修改
然后,用sqlAdapter1更新数据库时,
数据库中Details表的orderid 因为外键关系也为自动的修改
接下来,sqlAdapter2更新Details时,因为该表的orderid已被修改
这样必然引发,并发冲突
如果,删除数据库中两个表相关的外键,虽然不会产生并发冲突了,
但是这与数据库设计原理是有违的,这样的数据库是很脆弱的,可能会
产生毁灭性的灾难,
第两种解决方法是,选判断数据集中Details中orderid列对应各单元格的内容
是否已经修改过,再用多个数据适器更新,这样的话可能要判断十多种情况.
这样理论上是没有问题的,但是不怎么么现实!
--------------------------------------------------------------------------------------------------
这个,和一般的开放式并发处理没有区别。几个要点:
1、先主后从,使用事务包住。
2、更新的时候,不要选择遇到异常就失败那种模式。
3、从表捕捉到并发异常的时候(必然的,主表写入数据库时,已经触发了从表的变化),采用强制覆盖模式,不需要人工判断。
4、除去并发异常之外,其他异常即回滚,待用户调和之后重新提交。
如此而已,并不复杂。