может ли linq обновлять и запрашивать атомарно?
Вопрос
Мне нужно получить 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 может обновить таблицу и вернуть результаты атомарно, и тогда ваше приложение выполнит один вызов.
Вы можете окружить код замком {}.