我的应用程序需要写入一个充当系统范围计数器的表,并且该计数器需要在整个系统及其所有应用程序中都是唯一的。
此计数器目前作为Oracle数据库中的表实现。
我的问题是:我需要写入这个计数器表(使用一些键来保证每个业务流程中计数器的唯一性进入系统)而不会将其锁定在当前事务中,因为多个其他进程可能会读取或也写入此表。计数器中的空隙无关紧要,但我无法提前创建计数器值。
在这种情况下,简单的SEQUENCE对我没有帮助,因为序列号是格式化的数字。
目前,我还有其他一些非db替代方法可以实现这一目标,但我希望尽可能避免更改系统代码。
实际上,如果我可以打开一个不会参与当前事务的新连接,写入表格,然后关闭这个新连接,那将是最简单的,但我疲惫的心灵找不到办法做到这一点。
答案必须是显而易见的,但光线现在不会照亮我。
答案 0 :(得分: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
答案 1 :(得分:1)
不确定。只需创建一个配置为打开未与外部事务耦合的新事务(内部事务)的组件。
阅读http://msdn.microsoft.com/en-us/library/ms172152%28v=vs.90%29.aspx#Y1642,了解TransactionScopes的进展情况。