Мудрец
Зарегистрирован: 29 September 2002
Сообщения: 1479
Примеры кода: 5
|
RE: Связь один ко многим в одной талице ... |
28 May 2003 14:14 |
|
|
|
|
Имеем таблицу следующей структуры Id (bigint, PKey, autoincrement), ParentId(bigint), Nm(varchar(300)). На клиенте dataset и winforms TreeView. Проблемой является каскадное удаление групп. На стороне MS SQL 2000 данная связь не позволяет проводить каскадное удаление, тогда как в датасет это возможно. Соответственно при Update возникает exception.
Вопрос 1. Каким образом задать порядок обновления строк Адаптером, или это возможно сделать только построчным обновлением с использование рекурсии (первым удаляем строку, Id которой не засветился в ParentId)?
Вопрос 2. Кто нибуть встречал примеры решений от MSDN или производителей компонент?
тогда как в датасет это возможно. Соответственно при Update возникает exception.
Это точно?
Вопрос 1. Каким образом задать порядок обновления строк Адаптером, или это возможно сделать только построчным обновлением с использование рекурсии (первым удаляем строку, Id которой не засветился в ParentId)?
Могу только предложить такой извращённый вариант:
0. Перед всем этим извратом, который я напишу ниже, данные в датасете и базе надо синхронизировать.
1. На стороне клиента перед тем как удалить строку dataRow, клонируешь её в некую cloneDataRow.
1.2. Удаляешь строку dataRow (срабатывает каскад, удаляются все дети)
1.3. Делаешь AcceptChanges для всей таблицы1.4. Добавляешь cloneDataRow в таблицу,
1.5. Делаешь для cloneDataRow AcceptChanges.
1.6. Удаляешь cloneDataRow из таблицы (Delete, а не Remove)
1.7. Обновляешь данные на сервере БД.
2. На стороне БД при помощи INSTEAD OF триггера удаляешь все дочерние строки родительской строки, ну и её соответственно.
Общий смысл понятен? Фактически надо выполнить одну и туже работу на клиенте и на сервере. Клиент при обновлении БД передаёт якобы всего одну удалённую строку и сервер удаляет все соответствующие дочерние строки.
P.S. Где то у меня вертится мыслишка, что это всё как то поизящнее можно сделать, но оформить пока не могу. Если что - напишу
Dream Theater: Train of Thought
|
|