может ли linq обновлять и запрашивать атомарно?

StackOverflow https://stackoverflow.com/questions/643087

  •  22-07-2019
  •  | 
  •  

Вопрос

Мне нужно получить 1000 строк из базы данных и в то же время пометить их как "в процессе".Таким образом, другой поток не сможет взять те же 1000 строк и обработать их так же хорошо.

С linq я делаю что-то вроде этого:

сообщения = (из m в базе данных.сообщения где (m.status == MESSAGESTATUSINIT) выберите m).Возьмите (1000).ToList();

в идеале я бы в то же время установил статус MESSAGESTATUSPROCESSING.Конечно, это ДОЛЖНО быть атомарно.

есть какие-нибудь идеи?Или это возврат к SQL?

Спасибо!

Это было полезно?

Решение

Вы не можете сделать это в linq2sql.Используйте хранимую процедуру и настройте ее в конструкторе для вывода сообщения.Таким образом, вы можете манипулировать загруженными объектами и нормально фиксировать изменения.

Проверьте это, чтобы узнать, как это сделать (в частности, сопоставление типа возвращаемого значения методов SPROC с классами модели данных):http://weblogs.asp.net/scottgu/archive/2007/08/16/linq-to-sql-part-6-retriving-data-using-stored-procedures.aspx

Другие советы

Сам Linq не собирается предлагать эту возможность;Имейте в виду запросы Linq ==.Обновление данных происходит в другом месте.

Возможно, в этом случае вам было бы лучше написать хранимую процедуру для возврата результатов;Sproc может обновить таблицу и вернуть результаты атомарно, и тогда ваше приложение выполнит один вызов.

Вы можете окружить код замком {}.

Заблокировать ключевое слово

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top