ADO.NET Вставка в связаные таблицы
От: chaynik_  
Дата: 24.07.08 06:45
Оценка:
Привет всем. Проблема следующая:
В типизированном датасете есть две таблицы например Master и Details. отношение один ко многим Master-Details. Ключи таблиц проставляются инкрементом. Допустим были вставлены одна запись в Master(родительская) и несколько записей в Details(дочерняя).При этом запись в таблице Master получила id = 100 и записи в Details ссылаются на этот id. Теперь при апдейте родительской таблицы вставленая запись получила в БД другое значение, например 101.Т.е. в Датасете как висело 100 так и висит, пока не сделаешь заново Fill. В этой ситуации апдейт дочерней таблицы не пройдет, т.к. у нее ссылки на 100 а не на 101.
Как сделать, чтобы после апдейта таблица Master обновлялась при получении другого id и на основании этого обновлялись ссылки в таблице Details(дочерняя), чтобы можно было сделать корректно инсерт дочерней таблицы. Надеюсь ясно изъяснился)))
Re: ADO.NET Вставка в связаные таблицы
От: RushDevion Россия  
Дата: 24.07.08 11:22
Оценка:
Первое, что приходит в голову:
— Пропиши UPDATE CASCADE и DELETE CASCADE для связи (большинство СУБД это поддерживают)
Второе, что приходит в голову:
-Зачем понадобилось менять ключи?
Re: ADO.NET Вставка в связаные таблицы
От: vmpire Россия  
Дата: 24.07.08 11:34
Оценка: +1
Здравствуйте, chaynik_, Вы писали:

_>Привет всем. Проблема следующая:

_>В типизированном датасете есть две таблицы например Master и Details. отношение один ко многим Master-Details. Ключи таблиц проставляются инкрементом. Допустим были вставлены одна запись в Master(родительская) и несколько записей в Details(дочерняя).При этом запись в таблице Master получила id = 100 и записи в Details ссылаются на этот id. Теперь при апдейте родительской таблицы вставленая запись получила в БД другое значение, например 101.Т.е. в Датасете как висело 100 так и висит, пока не сделаешь заново Fill. В этой ситуации апдейт дочерней таблицы не пройдет, т.к. у нее ссылки на 100 а не на 101.
_>Как сделать, чтобы после апдейта таблица Master обновлялась при получении другого id
вернуть этот ID из процедуры как OUTPUT параметр, при этом в SqlParameter должно быть корректно выставлено его направление и исходная колонка

_>и на основании этого обновлялись ссылки в таблице Details(дочерняя), чтобы можно было сделать корректно инсерт дочерней таблицы. Надеюсь ясно изъяснился)))

Поставить в датасете cascade update на этот ключ
Re[2]: ADO.NET Вставка в связаные таблицы
От: vmpire Россия  
Дата: 24.07.08 11:36
Оценка:
Здравствуйте, RushDevion, Вы писали:

RD>Первое, что приходит в голову:

RD>- Пропиши UPDATE CASCADE и DELETE CASCADE для связи (большинство СУБД это поддерживают)
Чем это поможет в обновлении датасета?

RD>Второе, что приходит в голову:

RD>-Зачем понадобилось менять ключи?
Потому, что заранее не угадать, какое identity сгенерируется
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.