亚音速和乐观并发

时间:2009-10-01 20:17:14

标签: subsonic

Subsonic是否以某种方式使用乐观并发?

2 个答案:

答案 0 :(得分:3)

如果通过使用表示内置到SubSonic,那么没有。然而,SubSonic可以合理地简单地实现乐观并发。

假设您正在使用SQL Server(如果不是,我会让您将以下说明转换为适用于您的数据库提供程序的解决方案),这是一种方法:

  1. 在每个要确保并发的表上包含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 */
    )
    
  2. 读取时间戳的值以及数据,以便稍后可以使用它进行比较。

    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      
    
  3. 执行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)

我在这里找到了一个我正在测试的解决方案。

http://sites.google.com/site/subsonicoptimistic/home