我读到(或者可能从同事那里听说)在.NET中,TransactionScope可以达到超时,然后VoteCommit(与VoteRollback相反)。这是准确的还是传闻?我无法在网上找到讨论此问题的信息(如果这是一个问题),所以我想知道是否有人对此有任何直接经验并可以阐明一些信息? 最佳答案 MarcGravell描述的行为在.Net4.0中已发生变化。现在,它不会自动提交操作,而是抛出InvalidOperationException。所以在4.0中你不再需要使用ExplicitUnbind。
请参阅下面的代码。如果我初始化了多个实体上下文,那么我会在仅在第二组代码上得到以下异常。如果我注释掉第二组它会起作用。{"TheunderlyingproviderfailedonOpen."}Inner:{"Communicationwiththeunderlyingtransactionmanagerhasfailed."}Inner:{"ErrorHRESULTE_FAILhasbeenreturnedfromacalltoaCOMcomponent."}请注意,这是一个示例应用程序,我知道连续创建2个上下文没有意义。但是,生产代码确实有理由在同一个TransactionScop
我正在寻找一种在TransactionScope处于事件状态时执行查询的方法,并忽略TransactionScope-基本上,无论如何我都想执行这个特定的查询。我正在使用EF代码优先,应用程序的设计方式是,在一次调用中多次打开新的数据上下文,每次都有自己的更改,所有这些都包含在单个TransactionScope中,假设没有失败,它在最后调用了Complete()。在上下文中,我们覆盖了SaveChanges,这样如果base.SaveChanges()发生任何异常,我们可以在回滚事务之前捕获它并记录到数据库.由于SaveChanges发生在事务内部,日志记录显然不会发生,因为它与原始
序言:我设计了一个强接口(interface)且完全可模拟的数据层类,它期望业务层创建一个TransactionScope。当多个调用应包含在单个事务中时。问题:我想单元测试我的业务层在我期望的时候使用TransactionScope对象。不幸的是,使用TransactionScope的标准模式如下:using(varscope=newTransactionScope()){//transactionalmethodsdatalayer.InsertFoo();datalayer.InsertBar();scope.Complete();}虽然就程序员的可用性而言,这是一个非常好的模式
只是想知道,如果我想创建一个做某事的类并且我希望能够在TransactionScope中使用,我需要实现什么?也就是说:我的类需要知道它在一个事务中,但是它如何在提交或回滚时得到通知?在回滚时,我将如何实际回滚?我假设我的类会有像“Add”、“Update”和“Delete”这样的方法,它们只修改一个临时的更改列表,还有一个方法“Read”需要检测它是否在一个事务中并返回修改过的或相应的未修改数据,但我需要一个以某种方式调用的方法Commit/Rollback?我会订阅Transaction.TransactionCompleted事件吗?如果是,如何避免多次订阅同一笔交易?我注意到交
我正在尝试使用TransactionScope,但一直收到以下异常。如果重要的话,应用程序与数据库在不同的机器上运行。我正在使用SQLServer2005。NetworkaccessforDistributedTransactionManager(MSDTC)hasbeendisabled.PleaseenableDTCfornetworkaccessinthesecurityconfigurationforMSDTCusingtheComponentServicesAdministrativetool.using(TransactionScopetsTransScope=newTra
我正在尝试使用新的异步/等待功能异步处理数据库。由于某些请求可能很长,我希望能够取消它们。我遇到的问题是TransactionScope显然具有线程亲和性,并且似乎在取消任务时,它的Dispose()在错误的线程上运行。具体来说,当调用.TestTx()时,我在task.Wait()InvalidOperationException的AggregateException:"ATransactionScopemustbedisposedonthesamethreadthatitwascreated."代码如下:publicvoidTestTx(){varcancellation=newC
这个问题在这里已经有了答案:C#System.TransactionsVsTransactionScope(1个回答)关闭去年。System.Transactions.TransactionScope和EF6的Database.BeginTransaction有什么区别?谁能举个小例子,或者只是解释一下在有明显区别的情况下使用哪一个?P.S:在我的项目中,我使用的是EF6。我已经阅读了文档,但没有太大帮助。还查看了示例,但他们宁愿使用SqlConnection.BeginTransaction,现在MS在EF6中引入了这个新的Database.BeginTransaction。
我正在尝试将async/await集成到我们的服务总线中。我根据这个例子实现了一个SingleThreadSynchronizationContexthttp://blogs.msdn.com/b/pfxteam/archive/2012/01/20/10259049.aspx.它工作正常,除了一件事:TransactionScope。我等待TransactionScope中的内容,它破坏了TransactionScope。TransactionScope似乎不太适合async/await,当然是因为它使用ThreadStaticAttribute在线程中存储内容。我得到这个异常(ex
SqlConnection在事务中“登记”是什么意思?这是否只是意味着我在连接上执行的命令将参与事务?如果是这样,在什么情况下SqlConnection会自动加入环境TransactionScope事务?请参阅代码注释中的问题。我对每个问题的答案的猜测都在括号中的每个问题之后。场景1:在事务范围内打开连接using(TransactionScopescope=newTransactionScope())using(SqlConnectionconn=ConnectToDB()){//Q1:Isconnectionautomaticallyenlistedintransaction?(Y