Дозвуковой и оптимистичный параллелизм - PullRequest
3 голосов
/ 02 октября 2009

Использует ли Subsonic оптимистический параллелизм?

Ответы [ 2 ]

3 голосов
/ 02 октября 2009

Если под использовать вы имеете в виду встроенный для 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
    }
    
2 голосов
/ 01 января 2011

Я нашел решение для этого здесь, которое я сейчас тестирую.

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

...