![]() |
|
Модераторы: gambit |
![]()
|
|
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Если нужна одна таблица - нет смысла создавать датаСет. Мне одна табла и нужна - таблица древа документов. Код:
но.... если я удаляю родительскую запись, дочерние остаются, хотя я ясно прописал, что нужно выполнять каскадные действия. Что не так делаю? |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
||||
|
||||
| Compositum |
|
||||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
но я же так и делаю - сначала указываю поле первичного ключа, затем внешнего, так что менять не нужно.: ![]() поле father дочерней записи должно содержать значение поля id родительской записи. так что все у меня вроде правильно... Это сообщение отредактировал(а) Compositum - 21.6.2008, 16:30 |
||||
|
|||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Compositum, насчет порядка аргументов я ошибся.
Судя по всему, ограничения не работают без DataSet. На эту мысль наводит тот факт, что в DataSet есть свойство EnforceConstraints (по умолчанию true), а в таблице же нет средств для включения/выключения ограничений. Как только добавляешь таблицу в DataSet, ограничения начинают работать. Я добавил следующий код после Вашего:
Тогда при удалении первой строки удаляются все строки, в которых она является родителем (Father). Думаю, Вы именно такого поведения добивались? Правда, я не нашел, как добавлять корневые элементы. Должна быть настройка, позволяющая в дочернем поле хранить не только значения родительского поля, но и null. Поэтому для демонстрации первый элемент сделал родителем самого себя. Это сообщение отредактировал(а) Idsa - 21.6.2008, 16:51 |
|||
|
||||
| Compositum |
|
|||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
Да, я знаю, что если таблицу закинуть в DataSet все начинает работать. Вопрос вызван вот чем: в своей книге Сахил Малик пишет, что ежели программист собирается использовать одну таблицу, то создавать DataSet нет необходимости, поскольку DataTable обладает таким же функционалом и к тому же меньше ресурсов ест. Вот я и пытался реализовать это вне DataSet.
Я просто не пойму назначений этих полей, если они вне датаСета не работают. В датеСете можно сделать и так (та же малина получится):
напрашивается вывод - не в каждой ситуации, когда нужно использовать только одну таблицу, подойдет для этого ДатаТабла. Не в каждой... Это сообщение отредактировал(а) Compositum - 21.6.2008, 17:11 |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 15 Всего: 62 |
Да-да. Помню эту фразу из его книги
Да, видимо, так и есть. Странно, что я нигде не находил заметок о несостоятельности DataTable при работе с ограничениями. Даже в MSDN ни слова. Кстати UniqueConstraint работает. Видимо, ForeignKeyConstraint не работает без DataSet по тому соображению, что в 90% случаев ForeignKeyConstraint связывает 2 разные таблицы. А если есть 2 таблицы, то почему бы их не "упаковать" в DataSet |
|||
|
||||
| Magnifico |
|
||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 23.1.2008 Где: Московская област ь Репутация: 2 Всего: 17 |
DBNull.Value по умолчанию можно задать явно father.AllowDBNull =true;
интерсно что для реальной таблицы (субд ms sql server) для одной и той же таблицы нельзя задать
даст ошибку:
Зацикливание и все такое прочее.... -------------------- Всё в порядке - спасибо зарядке ! |
||||||||||
|
|||||||||||
| Compositum |
|
||||
|
Senior developer ![]() ![]() Профиль Группа: Awaiting Authorisation Сообщений: 430 Регистрация: 6.1.2008 Где: Санкт-Петербург Репутация: нет Всего: 1 |
[QUOTE=Magnifico,22.6.2008, 11:49]
я в курсе. а еще в том же Аксессе Майкрософт таких ограничений не делал - в нем все прекрасно работает. но вопрос был не в этом =) |
||||
|
|||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Базы данных под .NET | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |