问题标签 [transactionscope]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
nhibernate - NHibernate、事务和 TransactionScope
我正在尝试找到在使用 NHibernate 的 Web 应用程序中处理事务的最佳解决方案。
我们使用 IHttpModule 并在 HttpApplication.BeginRequest 我们打开一个新会话并使用 ManagedWebSessionContext.Bind(context, session); 将其绑定到 HttpContext;我们关闭并取消绑定 HttpApplication.EndRequest 上的会话。
根据最佳实践,在我们的 Repository 基类中,我们总是围绕 SaveOrUpdate、Delete、Get 方法包装事务:
但这不起作用,如果您需要将事务放在例如应用程序服务中的某个位置,以包括对保存、删除等的多个存储库调用。
所以我们尝试的是使用 TransactionScope(我不想编写自己的事务管理器)。为了测试这是否有效,我使用了一个不调用 .Complete() 的外部 TransactionScope 来强制回滚:
存储库保存():
使用存储库的块:
这行不通。但对我来说,如果 NHibernate 支持 TransactionScope 它会!发生的情况是数据库中根本没有 ROLLBACK 但是当 testRepository.GetById(testEntity.Id); 语句执行了一个带有 SET Text = "TestCahgned" 的 UPDATE 代替触发(它应该在 BEGIN TRAN 和 ROLLBACK TRAN 之间触发)。NHibernate 从 level1 缓存中读取值并触发 UPDATE 到数据库。不是预期的行为!?据我了解,每当在 NHibernate 范围内完成回滚时,您还需要关闭并取消绑定当前会话。
我的问题是:有谁知道使用 TransactionScope 和 ManagedWebSessionContext 的好方法?
wcf - 在 TransactionScope 中使用 netMsmqBinding 调用 WCF 停止事务
我有一个通过 MSMQ 运行的 WCF 日志记录服务。项目记录到 Sql Server 2005 数据库。如果在 TransactionScope 之外使用,每个功能都可以正常工作。在 TransactionScope 实例中使用时,调用总是会导致事务中止。Message = "事务已中止"。
我需要做什么才能让这个调用在事务中工作?有没有可能。我已经读过,对于流经服务边界的客户端事务,绑定必须支持事务流,这会立即将绑定限制为仅 NetNamedPipeBinding、NetTcpBinding、WSHttpBinding、WSDualHttpBinding 和 WSFederationHttpBinding。
linq-to-sql - SQL Server Compact (CE) 是否支持另一个内部的 RequiresNew 事务范围?
这是一个使用 SQL Server CE 3.5 SP1 的非常简单的示例,我尝试在现有事务中使用新事务。
这会导致错误“无法在事务范围内登记连接对象”。在第二次调用“db.SubmitChanges()”时
这篇文章指出 SQL CE 不支持一个事务中的两个连接,但我这里只有一个(除非 SubmitChanges() 创建另一个)。
上面的想法是,如果子事务提交,那么即使外部事务失败,它也会保持提交。据我了解,这是RequiresNew 的预期用途。
这篇 MSDN 文章声称 SQL CE 支持嵌套事务,因此我认为上述应该是可能的。是吗?如果是这样,我如何修改代码以使其工作?
编辑:虽然这篇 MSDN 文章与其他 MSDN 文章相矛盾,并说不支持嵌套事务。也许这就是问题所在?
transactionscope - TransactionScope how can I tell if a Connection has been enlisted
I have a method that has a connection as one of it's parameters:
e.g. public void Foo(SqlConnection pConn) { }
within Foo is it possible to determine if pConn is enlisted in any transactionscope?
nhibernate - NHibernate 事务:为什么这会导致提交数据?
下面的代码演示了一种误导性的情况,即数据被提交到数据库,即使从未在事务上调用提交。
谁能解释为什么?
linq - Linq to sql 同一事务中的多个数据上下文
我正在做一个项目,我有多个存储库来从不同的表中获取数据。我所有的存储库都是独立的,它们创建新的 dataContext,将行添加到表并应用提交更改命令。现在,如果在我的服务中,有一种情况是我必须将数据插入到多个表中,但它应该发生在一个事务中。我可以使用 TrnasctionScope 的东西来实现,但这需要相同的 dataContext。由于我使用 StrucutreMap 创建对象,我无法获得相同的数据上下文,因此我的事务失败。
这是我的对象的样子。
现在在我的服务层中,我将它们称为
我如何将相同的数据上下文传递给两个不同的存储库。我选择,我认为是在每个存储库中创建一个接受 IDataContext 参数的重载方法,如下所示。
在我的服务层中,我会将其实现为
我的第二个想法是,如果我可以以某种方式配置 DataContext 以在调用 GetContext 方法时返回相同的连接。因此所有存储库都将使用相同的连接。但我觉得这会一直保持联系。我希望此连接仅在此 SaveAll 方法期间可用。
你的帮助将得到回报。提前致谢。
干杯帕尔曼德
entity-framework - 在实体框架中使用选择锁定表
我需要做这样的事情
使用实体框架。这可能吗?我TransactionScope
用Serializable
隔离级别打开了一个,但我的选择没有锁定表。我希望他们锁定,直到我完成交易范围。
.net - 使用 Linq To SQL 的多个 SubmitChanges 和事务回滚
我正在使用 TransactionScope 将 Linq 中的数据提交到 SQL。我的问题是,如果我在同一个范围内使用多个 SubmitChanges,是否会在出现错误时回滚所有范围,或者只是在最后一次 SubmitChanges 之后所做的更改?例如:
如果 update SubmitChanges 抛出异常,插入的 SubmitChanges 也会回滚吗?
c# - 使用 TransactionScope 处理事务
在这篇 MSDN 文章http://msdn.microsoft.com/en-us/library/system.transactions.transactionscope.aspx的帮助下,我正在使用 TransactionScope 实现事务
我只是想确认将 TransactionScope 与 Tableadapter 一起使用时是否有任何问题?
我已经阅读了这篇文章并阅读了一些与此相关的问题,但这篇文章已有 2.5 年的历史了 http://blog.falafel.com/2007/04/09/GettingTableAdaptersToParticipateInTransactions.aspx
我希望在最新版本的 .Net Framework 中,问题已得到解决
我正在使用 .Net 框架 3.5 版本
谢谢
c# - 存储库设计问题
我认为我正在进行的 Web 项目中存在一些设计错误(我正在使用 Linq2SQL 实现存储库模式)1)每个存储库都创建自己的 DataContext(这是否正确?应该这样)例如:
另一个例子:
正如你所知道的,我正在使用 IoC(Windsor,使用 Lifestyle="PerWebRequest")。
2) 为每个存储库使用服务层。例如对于人
这是定义服务层的正确方法吗?或者我应该使用一个引用所有存储库的服务类?
3)personTable和trainingCenterTable之间有关系。每次我在 TrainingCenter-Service 中插入一些东西时,我还必须在 Person-Service 中插入一条记录。所以解决这个问题的方法是:
当然我希望这两个插入以事务方式发生,所以我决定将这些语句包装在
所以出现了一个新问题:服务器'.\SQLEXPRESS'上的MSDTC不可用(因为有不同的DataContexts,对吗??)。如何克服这个?!?
一种解决方案是在外部创建 DataContext 并将其作为参数传递给存储库!??正确的想法?但如何实施?
4)使用现有设计,我必须调用:TrainingCenterBusinessLayer.Save(); PersonBusinessLayer.Save(); 我认为这是错误的!save() 操作应在 DataContext 中调用一次。但是怎么做?(显然,如果解决了上述问题,这可以解决)。