亲爱的,
我有一些场景,我必须在 LightSwitch 的内部数据库上执行更新,并在一次事务中调用保存管道中的一些 SQL 存储过程,这样,如果 LS 保存管道中发生错误,那么我的存储过程调用是回滚。
建议的方法是在 SaveChanges_Executing 事件中设置环境事务,并在 SaveChanges_Executed 和 SaveChanges_ExecuteFailed 事件中对其进行处理。如本文所述http://www.codemag.com/Article/1103071
但这有两个致命的问题:
- 当我在 Azure 上发布应用程序时,它不起作用,因为那里不支持分布式事务。
- 当我尝试使用 ServerApplicationContext 保存对 ApplicationData 源的更改时,它还会引发错误。错误是这样的:底层提供程序在 EnlistTransaction 上失败
有没有人找到一种更干净的方法来处理 LightSwitch 中的事务,该方法既可以在 Azure 上运行,也可以通过 ServerApplicationContext 运行?
非常感谢
最佳答案
目前,使用 MSDTC 的分布式事务不适用于 SQL Azure。不过,它们可以在 Azure 中运行的 VM 中针对 SQL Server 正常工作。一般来说,MSDTC 与在域 Controller 上运行相关,这在公共(public)云环境中没有意义。可能需要替代 DTC,但这尚未公开宣布。
我不认为 Lightswitch 是这里的主要问题(尽管它可能还有一些超出我所描述的其他问题)。
我希望这至少能解释为什么它今天不起作用 - 我希望我有一个更好的答案给你,但现在这是不可能的。正在使用的“解决方法”是构建能够适应每一方(或不是)发生的提交并从失败的情况中恢复的应用程序。
关于azure-sql-database - 灯开关 : Distributed transactions on Azure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220977/