我有一个包含两个数据库的Spring应用程序:一个用于Spring元数据的SQL,另一个是存储所有业务数据的MongoDB。关系数据库仍然使用DataSourceTransactionManager。但是,我认为Mongo写的东西并不是在带有回滚的活动事务中完成的。以下是 on MongoItemWriter的摘录
使用Spring的ItemWriter实现向MongoDB存储写入的一种MongoOperations实现。由于MongoDB不是一个事务性存储,所以在最后一刻尽力持久化书面数据,但仍然遵守作业状态合同。如果写入过程中发生错误,则不尝试回滚。
然而,这种情况不再是这样了;,
我已经创建了几个自定义活动来更新我的DB中的表(在本例中是SQLServerCompact),使用实体框架4和POCOs。
如果我在WF4 TransactionScope活动中放置了多个数据库,就会遇到问题: EF在第一个活动完成后处理DB连接,当下一个DB活动尝试执行DB更新时,就会建立一个新的连接。此时抛出一个异常。
System.Activities.WorkflowApplicationAbortedException : The workflow has been aborted.
----> System.Data.EntityException : The underl
我的一个控制器动作就像
def create
App.transaction do
app = App.create_new_app(params["app_alias"])
campaign = Campaign.create_new_campaign(params)
user = User.create_new_user(params)
end
end
说,“事务作用于单个数据库连接”和“完全分布的事务超出了活动记录的范围”。如果在创建用户或活动时有一些异常,那么应用程序也会回滚,反之亦然。
我想在Server1.DB1中执行一个存储过程,这个存储过程将在另一个使用动态SQL的存储过程中执行,它将在Server1.DB2中执行。
我需要使用begin/end transaction来确保所有东西都执行了,否则所有东西都失败了。
问题是:在这种情况下,使用指向不同数据库的动态SQL,事务可以工作吗?
喜欢
BEGIN TRANSACT
--Set Status to "In Progress"
SET @Qry = N'EXEC '+ @DB2 + '.[dbo].[StatusUpdate] @Id, @Status