SharePoint列表上缺少事务(回滚和提交)支持的变通方法是什么?

SharePoint列表上缺少事务(回滚和提交)支持的变通方法是什么?,sharepoint,sharepoint-2010,transactions,Sharepoint,Sharepoint 2010,Transactions,SharePoint不提供列表数据操作的事务(回滚和提交)支持。实现事务行为的变通方法是什么 用例1: 当一个项目添加到列表中时,我想更新另一个列表项目。但是如果更新失败,我想回滚添加到第一个列表中的项 用例2: 以编程方式更新10个列表项。如果第10次更新失败,我想回滚前9次更新 尽管SharePoint List不是关系数据库,也不应该作为关系数据库,但开发人员越来越多地使用它来存储业务关键型数据(这需要数据完整性)不鼓励他们使用外部列表,因为它对普通列表上可用的功能有很多限制。由于SPLi

SharePoint不提供列表数据操作的事务(回滚和提交)支持。实现事务行为的变通方法是什么

用例1: 当一个项目添加到列表中时,我想更新另一个列表项目。但是如果更新失败,我想回滚添加到第一个列表中的项

用例2: 以编程方式更新10个列表项。如果第10次更新失败,我想回滚前9次更新


尽管SharePoint List不是关系数据库,也不应该作为关系数据库,但开发人员越来越多地使用它来存储业务关键型数据(这需要数据完整性)不鼓励他们使用外部列表,因为它对普通列表上可用的功能有很多限制。

由于SPList不提供事务的固有支持,您必须自己处理回滚操作

在用例1和用例2中,模拟事务的最简单方法是在执行更新之前读取正在更改的任何列表项的状态,然后在检测到故障时将该状态写回。这不是一个完美的解决方案,因为一个足够严重的错误可能会阻止您的回滚更新。这是您为没有数据存储支持事务而付出的代价


话虽如此,虽然许多客户确实会要求将业务关键型数据存储在SPList中,但我认为您的工作是让他们相信这不是一个好主意,通过Web服务访问的事务性数据库是存储重要数据的一种更安全的SP兼容方式。

我发现,如果使用支持版本控制的列表,则更简单一些。
我使用中间类访问列表项。当我在该类上调用.Update()时,我存储正在更新的任何项的当前版本id。如果以后在“事务”中出现任何问题,我只需返回到该版本id。

我认为这是一个适用于简单用例的良好解决方案。如果有工作流或事件接收器附加到列表行操作,则应用此方法太复杂或有时不可行。在其他数据库系统中,事务可以以声明方式完成(无需编写代码)。列表的基本概念是一个简单而强大的数据容器。仅仅为了实现一种转录行为,诉诸于代码和类似黑客的变通方法就挫败了快速的生产力和简单性。在某些情况下,版本方法是有效的,如果它不合适,并且您仍然希望将数据存储在SharePoint列表中,那么您前面的路就更长、更艰难了。。。