Subsonic是否以某种方式使用乐观并发?
答案 0 :(得分:3)
如果通过使用表示内置到SubSonic,那么没有。然而,SubSonic可以合理地简单地实现乐观并发。
假设您正在使用SQL Server(如果不是,我会让您将以下说明转换为适用于您的数据库提供程序的解决方案),这是一种方法:
在每个要确保并发的表上包含timestamp
类型的列。
CREATE TABLE Product
(
ProductID int NOT NULL IDENTITY(1,1),
Name varchar(256) NOT NULL,
RowStamp timestamp /* This will hold a timestamp for the table */
)
读取时间戳的值以及数据,以便稍后可以使用它进行比较。
var product = new SubSonic.Select()
.From<Product>()
.Where(Product.ProductIDColumn).IsEqualTo(productId)
.ExecuteSingle<Product>();
var rowStamp = product.RowStamp;
// ... Show a form to the user with the data from the product
执行UPDATE
时,将时间戳的值与数据库值进行比较。如果时间戳不匹配,则该行已被修改,并且可以通知用户该情况(或者您可以随意处理它)
// ... After retrieving the values from the form
var result = new SubSonic.Update(Product.TableSchema)
.Set(Product.NameColumn).Equal(newName)
.Where(Product.ProductIDColumn).IsEqualTo(productId)
.And(Product.RowStamp).IsEqualTo(rowStamp)
.Execute();
if (result != 1)
{
// Notify the user there may be a problem
}
答案 1 :(得分:2)
我在这里找到了一个我正在测试的解决方案。