TransactionScope,使用Subsonic选择

时间:2009-08-25 09:25:21

标签: subsonic

我有一张发票表(以及一张带有ActiveRecord()列的SubSonic'发票'InvoiceNumebr,需要有唯一的数字。我正在GetTheNextAvailableNumber()TransactionScope使用块。这有效。

我不确定的是,如果5个或50个不同的用户尝试在大约创建发票时会发生什么。同时,如果方法在以后保存发票对象,则该方法将为所有5或50个用户返回相同的数字。

GetTheNextAvailableNumber()块内调用的TransactionScope方法使用带有MAX()的Subsonic Select查询来获取最大数量,然后添加1.列本身确实具有UNIQUE索引!

交易的隔离级别默认(可序列化)是否确保每个都获得一个唯一的数字?或者是否有更聪明的机制来实现这一目标? 该列不能具有IDENTITY,因为PK列 InvoiceID 已经拥有它。

2 个答案:

答案 0 :(得分:1)

你在谈论交易范围内的并发性 - 唯一可行的方法是在trannie执行时对表施加锁定......这可能会扼杀你的应用程序。

你有可能使用Guid吗?

答案 1 :(得分:0)

如果在db中构建第二个表并在该表中存储NextAvailableNumber的值,该怎么办?然后,您将使用存储过程来检索该值并在同一调用中将其递增。您只需要锁定该存储过程以防止并发调用。您也可以将其锁定在存储过程中。