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