我遇到的问题是:
我有一个表(只是一个例子),其中包含以下字段:
ID int
Value int
我有一个名为IncreaseByFive()的方法,它执行以下操作:
method IncreaseByFive(int ID)
{
int value = GetValueFromDB(ID);
value = value + 5;
SaveValueToDB(value, ID);
}
我想避免的是以下情况:
现在记录的值为10,应为15。
我想强制的是以下内容:
现在记录的值为15,这是我正在寻找的结果。
我过去使用静态类解决了这个问题并对该类的构造函数中创建的静态对象进行了锁定,从而通过一个静态方法汇集了所有工作,这迫使其他调用在线等待。但我担心这不可扩展。
我还认为事务的最高隔离级别(可序列化)不会起作用,因为它将允许在上面不需要的示例的步骤2中读取。
我想另一个解决方案是创建我自己的锁表并在那里记录锁,但这似乎不应该是必要的。
我正在使用C#(3.5)和SQL server 2008开发此项目。
蜂巢思维的想法是什么?
答案 0 :(得分:0)
也许我 over 未解决这个问题,但是你不能只包装整个逻辑块。
SET TRANSACTION ISOLATION LEVEL
{ READ UNCOMMITTED
| READ COMMITTED
| REPEATABLE READ
| SNAPSHOT
| SERIALIZABLE
}
[ ; ]