Предположим, что у меня есть таблица Orders в моей базе данных и соответствующем образцовом классе, сгенерированном VS2008 "Linq разработчику" Классов SQL. Предположим, что у меня также есть хранимая процедура (ProcessOrder
) в моей базе данных, которую я использую, чтобы сделать некоторую обработку на записи порядка.
Если я делаю следующее:
var order = dataContext.Orders.Where(o => o.id == orderId).First();
// More code here
dataContext.ProcessOrder(orderId);
order.Status = "PROCESSED";
dataContext.SubmitChanges();
... затем я получу нарушение параллелизма если ProcessOrder
сохраненный proc изменил порядок (который, конечно, вероятен), потому что L2S обнаружит, что запись порядка изменилась и не отправит изменения в том порядке.
Это все довольно логично, но что, если я хочу обновить запись порядка после вызова сохраненного proc? Как я говорю L2S забывать о его кэшируемой копии и обновлять его от DB?
Вы можете сделать это с помощью метода Refresh
в контексте данных, например:
DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues,
DataContext.Orders);