2012-02-16 3 views
-2

когда я использую 'var select = from st в контексте.student где st.college == "ABC" select st;'Удалить операцию с использованием linq

context.student.DeleteAllonSubmit (выберите); context.student.SubmitChanges();

Если есть 10 записей, содержащих название колледжа, как «ABC», тогда увольняются 10 запросов на удаление.

+1

Возможный дубликат http://stackoverflow.com/questions/445033/use-linq-to-generate-direct-update-without-select –

+0

Но точная причина для запуска запроса выбора по-прежнему не устранена. Как мы можем избежать оператора select при обновлении и удалении запросов с использованием Linq – Piyush

+0

Я думаю, потому что, как говорится в ответе, LINQ или LINQ to SQL имеют возможности обновления на основе набора. Второй «ответ» дает возможность обойти. Но посмотрите, есть ли у кого-нибудь еще что-нибудь добавить. Мне было бы интересно –

ответ

1

Ну, мое единственное объяснение заключается в том, что Linq сначала должен выбрать строку, которую вы хотите обновить/удалить. После того, как он знает, на какие строки влияет обновление/удаление, Linq делает наиболее подходящий запрос для обновления/удаления строк, которые вы хотите, и выполняет их.

Пожалуйста, исправьте меня, если я ошибаюсь, это то, что, я думаю, происходит, я не знаю точно.

+0

Хорошо, что на самом деле происходит, это следующее. Когда u создает объект contect, инфраструктура сущности создает объекты из базы данных, используя ваш файл edmx (или другой файл, который обрабатывает преобразование из базы данных в объекты). Эти объекты не синхронизируются с вашей базой данных. Поэтому, когда вы удаляете/обновляете объекты из контекста объекта, и вы говорите, что хотите сохранить контекст объекта, инфраструктура сущности сравнивает ваши объекты с объектами в базе данных (также используя файл edmx (или другой)), который у вас есть. Затем инфраструктура сущности обновляет базу данных (с оптимальными запросами) в соответствии с вашими изменениями. –

+0

Рад помочь (не забудьте проголосовать :)). Я предлагаю открыть контекст объекта, используя один запрос Linq, который удаляет все строки, которые вы хотите удалить. Затем сохраните изменения и закройте контекст объекта (вы должны использовать оператор using, но это другое). Linq должен быть настолько умным, что он обнаруживает, что это возможно в одном запросе. Вы сделали так, чтобы Linq мог делать практически то же самое. Тогда все, что вам нужно сделать, это доверие Linq icm, инфраструктура сущности выполняет правильный запрос. Вы также можете отслеживать отправку запросов в SQL Server 2008. –

+0

Не могли бы вы разместить запрос Linq, который вы делаете? И, возможно, выяснить, что именно эти 10 запросов? Таблица сканированных таблиц ищет ect –

Смежные вопросы