![]() |
|
Модераторы: gambit |
![]()
|
|
| Magnetic |
|
||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 11.11.2006 Репутация: нет Всего: 1 |
Есть примерно такой код:
LINQ на базе пытается выполнить запрос на удаление записей, причем для каждой сущности выполняется свой запрос, в котором в предложении where поиск идет по всем колонкам таблицы. Приблизительный смысл запросов от LINQ при вызове метода SubmitChanges следующий:
И таких запросов несколько. Проблема вот в чем. Есть триггер на удаление. Он срабатывает после первого запроса на удаление, меняет lft, rght значения, из-за чего последующие запросы удаления не могут найти соответвующих записей. В результате метод SubmitChanges выбрасывает исключение со словом Conflict в названии и ни одна запись не удаляется. Можно ли LINQ указать, чтобы он удалял записи только по ID, а не по всем полям? Например, чтобы LINQ выполнял на базе запросы такого вида:
вместо указанного выше. --------------------
Dude, where's my car? |
||||||
|
|||||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
Magnetic, в ORM вообще туго с batch update и delete командами. Для LINQ есть workaround. В конце статьи исходный код с методами расширения.
|
|||
|
||||
| akizelokro |
|
||||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: нет Всего: 5 |
Аналогично, я предполагаю, для удаления. Надо завершать перевод с введением в DLinq. Но у меня с временем напряг (я тут озадачился с переездом в другой город), поэтому и торможу -------------------- a = a + b; b = a - b; a = a - b; |
||||
|
|||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
||||
|
||||
| Magnetic |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 11.11.2006 Репутация: нет Всего: 1 |
Поиски в интернете привели к следующему результату. Можно наследоваться от DataContext, переписать SubmitChanges и в нем вызвать ExecuteCommand c запросом, сформированным вручную, извлекая id из всех сущностей идущих на удаление. Жаль, что в LINQ нет возможности указать, чтобы он формировал запросы на удаление и обновление с поиском только по праймари кей, ведь если есть праймари кей, то чаще всего при обновлении и удалении записей через ооп поиск по всем полям и не требуется. Придется делать лишнюю работу. Может есть решение проще?
Это сообщение отредактировал(а) Magnetic - 24.6.2008, 16:34 --------------------
Dude, where's my car? |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 5 Всего: 62 |
Вы ходили по ссылке, которую я указал выше? |
|||
|
||||
| PashaPash |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1233 Регистрация: 3.1.2008 Репутация: 4 Всего: 49 |
Самописные хранимые процедуры и поддержка batch операций это конечно круто. Но проблема легко решается мышой в дизайнере - сменой аттирибута UpdateCheck для лишних колонок с Always на Never или WhenChanged. Или, как вариант, введением поля с IsVersion=true.
|
|||
|
||||
| Magnetic |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 11.11.2006 Репутация: нет Всего: 1 |
Idsa, посчитал, что реализовать решение, которо я нашел и рассказал в предыдущем посте будет проще реализовать, чем разобраться в предложенной статье, тем более на английском, но все равно спасибо за ответ.
PashaPash, то что нужно. Спасибо большое! --------------------
Dude, where's my car? |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | LINQ (Language-Integrated Query) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |