2012-12-17 37 views
2

我的应用程序需要写入一个充当系统范围计数器的表,并且此计数器在整个系统和所有应用程序中都必须是唯一的。有没有办法打开一个不参与当前TransactionScope的新连接?

该计数器目前在我们的Oracle数据库中以表格形式实施。

我的问题是:我需要写这个计数器表(它使用一些密钥来保证每个业务进程中的计数器的唯一性进入系统),而不会锁定在当前事务中,因为多个其他进程可能会读取或写入此表中。柜台的空位并不重要,但我无法事先创建柜台值。

简单的SEQUENCE在这种情况下不能帮助我,因为序列号是格式化的数字。

现在,我有一些其他的非数据库替代方案来实现这一点,但我想尽可能避免更改系统代码。

其实,如果我可以打开一个新的连接,它不会参与当前的事务,写入表格,然后关闭这个新的连接,但我疲惫的心灵找不到方法去做吧。

答案一定是显而易见的,但光线现在不会照到我。

回答

3

在使用“Suppress”选项创建的TransactionScope块内执行命令。这样你的命令就不会参与当前的事务。

using (var scope = new TransactionScope(TransactionScopeOption.Suppress)) 
{ 
    // Execute your command here 
} 

欲了解更多信息,请参阅http://msdn.microsoft.com/en-us/library/system.transactions.transactionscopeoption.aspx

+0

接受如解决了我的问题,而无需使用连接搞乱。正如我想的那样,这很明显。谢谢! –

相关问题