- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试在循环内使用事务范围。整个循环使用与数据库的单个连接进行。我正在使用 Entity Framework 4 进行数据库访问。在循环的第二次迭代期间,当执行 LINQ to Entites 查询时,会引发异常,指出服务器上的 MSDTC 不可用。
我读到显式打开连接然后登记事务应该可以解决这个问题,但事实并非如此。下面是反射(reflect)正在发生的基本操作的示例代码。
关于如何防止升级到 MSDTC 有什么想法吗?
Using context = New MyEntities()
Dim connection = context.Connection
connection.Open()
For index = 0 to (Me.files.Count - 1)
Dim query = From d In context.Documents
Where (d.DocumentID = documentID)
Select d.Status
Dim status = query.FirstOrDefault()
Using trans = New TransactionScope()
connection.EnlistTransaction(Transaction.Current)
Dim result = context.UpdateStatus(True)
If (result = 1) Then
WriteToFile()
trans.Complete()
End If
End Using
Next
End Using
编辑:如果我使用connection.BeginTransaction()、transaction.Commit()和transaction.Rollback()而不是TransactionScope,它工作得很好。不过,我仍然想找到一种方法让 TransactionScope 发挥作用。
最佳答案
TransactionScope
最初存在一个问题,即当遇到另一个连接时,它会将事务提升为分布式事务,即使所有连接都连接到同一个数据库。这是框架中的一个已知问题。
我相信他们在 .NET 4 中解决了这个问题,您使用的是哪个版本?
此答案中提供了解决方法:
Why is TransactionScope using a distributed transaction when I am only using LinqToSql and Ado.Net
与您的问题的评论基本相同,建议实际上只使用池中的一个物理连接 - 因此只有一个连接被登记。
再次查看您的问题,我可以看到上述内容不太可能产生不同,因为无论如何您只使用一个连接。也许尝试在每次迭代时显式关闭并重新打开连接,并利用连接池的好处。
或更理想的情况是,放弃使用 TransactionScope
,因为 IDbTransaction
这里有足够的范围来覆盖您的代码。
关于.net - TransactionScope一直在努力提升到MSDTC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5899430/
我正在尝试为我的项目创建一些单元测试,经过大量挖掘之后,我发现了Effort,这个想法很棒,它模拟数据库而不是处理伪造的DBContext,顺便说一句,很难做到正确使用复杂的架构。 但是,我将用户的电
我正在尝试对某些响应 Entity Framework 数据库上下文的类进行单元测试。为了寻求帮助,我设法找到了一个名为 Effort 的库,它似乎有点旧,而且没有很好的文档记录,但它似乎可以工作,而
这两天,Auto-GPT 爆火 https://github.com/Torantulino/Auto-GPT 它是一款让最强语言模型GPT-4能够自主完成任务的模型,让整个AI圈疯
为什么会出现这个异常?这是错误吗? 我正在使用 EF 测试库 Effort 创建我的数据库的内存实例并遇到这个有趣的场景: 打开DbContext1 将项目添加到表(不保存) 关闭DbContext1
我是一名优秀的程序员,十分优秀!