Rambler's Top100
Главная
Новости
Статьи
Форумы
Книги
Коды
Сообщество
Блоги
О нас
 

Логин

Email:
  Пароль:

Войти
Зарегистрироваться
Забыл пароль

Поиск

 Искать :
 
Вперед

Сообщение

Temych


Мудрец

Зарегистрирован:
29 September 2002
Сообщения: 1479
Примеры кода: 5
 

RE[2]: Связь один ко многим в одной талице ...

28 May 2003 15:17  


Имеем таблицу следующей структуры 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. Где то у меня вертится мыслишка, что это всё как то поизящнее можно сделать, но оформить пока не могу. Если что - напишу



Вариант2:

0. - то же самое
1. Удаляешь строку dataRow (срабатывает каскад, удаляются все дети)
2. Отключаешь нужную ForeignKey Constraint на сервере.
3. Обновляешь данные на сервере БД.
4. Включаешь нужную ForeignKey Constraint на сервере.


Dream Theater: Train of Thought
Наверх
  



ADO.NET

 Связь один ко многим в одной талице ...AlexeySM  28 May 2003 13:34
 RE: Связь один ко многим в одной талице ...Temych  28 May 2003 14:14
 RE[2]: Связь один ко многим в одной талице ...Temych  28 May 2003 15:17
 RE[3]: Связь один ко многим в одной талице ...AlexeySM  29 May 2003 15:54
 RE[4]: Связь один ко многим в одной талице ...Temych  29 May 2003 16:06
 RE[5]: Связь один ко многим в одной талице ...AlexeySM  30 May 2003 09:09
 RE: Связь один ко многим в одной талице ...AntonGart  28 May 2003 13:50
 
Наш Киев

Apartments for Rent

Rambler's Top100
Рейтинг@Mail.ru
Идея: Dimon aka Manowar Программирование: Dimon aka Manowar Дизайн: Dan Lebedev
Хостинг от компании Parking.ru
Карта сайта