我们可以在C#对象上实现Transaction吗?

时间:2010-02-25 09:04:25

标签: c# .net

我们可以在C#对象上使用事务。

所有事务是否仅适用于MSSQL,ORACLE等关系数据库...... ??

感谢。

8 个答案:

答案 0 :(得分:3)

您可能对Software Transactional Memory感兴趣。它存在于.NET世界中的一个实现,名为STM.NET

  

软件事务内存   (STM.NET)是一种高效的机制   隔离共享状态。该   程序员划分代码区域   在交易中操作   与其他人“原子化”和“孤立”   交易代码并发运行。

以下是Microsoft STM.NET团队的博客:http://blogs.msdn.com/stmteam/

答案 1 :(得分:3)

你所问的是Software Transactional Memory。由于目前这是一个开放的研究领域,目前还没有本地C#语言支持,因此最好使用existing synchronization options for C#,例如lock关键字,监视器,等待句柄等

如果您确实需要高级交易功能,那么Microsoft研究会有很多library implementations,例如< edit> SXM STM.NET&lt ; /编辑>

答案 2 :(得分:1)

有关如何在OOP中实现事务的讨论,请查看此discussion。在那里突出显示纪念和状态模式以实现交易行为(以及其他方法)。

答案 3 :(得分:1)

查看软件事务内存(STM.NET)。

它没有进入.Net 4,但可以单独下载

答案 4 :(得分:1)

Joe Duffy的博客上有Interesting article关于尝试在MS处进行交易记忆的问题。如果我总结一下,我会说:只有这样才能自己做。

答案 5 :(得分:0)

c#对象没有类似SQL的事务处理,但如果因为你遇到了线程问题,你应该使用lock

lock (myList)
{
    if (myList.Count > 0)
        myList.Clear();
}

这只是清除一个列表,但确保它不能被另一个线程同时修改。

答案 6 :(得分:0)

您可以使用TransactionScope Class

答案 7 :(得分:0)

看起来微软已经离开了。一些推理在这里给出https://www.infoq.com/news/2010/05/STM-Dropped虽然我没有完全卖出它的弱原子位置修改参数。我认为一个强大的原子事务,其中所有对象状态必须位于事务内部仍然具有优点。