Как мне получить Linq-to-SQL, чтобы обновить локальную копию записи базы данных? - PullRequest
6 голосов
/ 07 апреля 2010

Предположим, у меня есть таблица Orders в моей базе данных и соответствующий класс модели, сгенерированный конструктором VS2008 "Linq to SQL Classes". Предположим, у меня также есть хранимая процедура (ProcessOrder) в моей базе данных, которую я использую для обработки записи заказа.

Если я сделаю следующее:

var order = dataContext.Orders.Where(o => o.id == orderId).First();

// More code here

dataContext.ProcessOrder(orderId);

order.Status = "PROCESSED";

dataContext.SubmitChanges();

... тогда я получу нарушение параллелизма, если хранимый процесс ProcessOrder изменил порядок (что, конечно, очень вероятно), потому что L2S обнаружит, что запись заказа изменилась, и не сможет отправить изменения в этом порядке.

Это все довольно логично, но что если я захочу обновить запись заказа после вызова сохраненного процесса? Как мне сказать L2S забыть о своей кэшированной копии и обновить ее из БД?

1 Ответ

16 голосов
/ 07 апреля 2010

Вы можете сделать это с помощью метода Refresh в контексте данных, например:

DataContext.Refresh(System.Data.Linq.RefreshMode.OverwriteCurrentValues,
                    DataContext.Orders);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...