Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Сохранение связанных таблиц


Автор: mongoloid 6.8.2011, 21:37
 Суть проблемы: имеются три связанные таблицы, БД - SQL Server CE 3.5. Таблицы созданы в конструкторе, интерфейс юзера к ним (ДатаГридВью) - тоже.  Во всех таблицах ключевые поля - автоинкрементные. Одна из таблиц связана с двумя другими отношениями один-ко-многим. После внесения изменения в таблицы не удается сохранить БД, выскакивает ошибка - "Невозможно вставить внешний ключ, так как не существует соответствующий первичный ключ [...]"

 Поиск решения проблемы привел сюда: Д.Сеппа. Программирование на Microsoft ADO.NET 2.0, стр. 499. Цитата: 
" ВНИМАНИЕ! Полученные значения автринкремента могут не каскадироваться к соответствующим дочерним записям, что обусловлено особенностями средств проектирования среды Visual Studio, которые конфигурируют объект DataSet со строгим контролем типа. Как уже упоминалось в главе 9, объекты DataRelation, автоматически генерируемые средой Visual Studio 2005, не связаны с объектом ForeignKeyConstraint, поэтому изменения в родительской записи не могут каскадироваться в соответствующие дочерние записи. Столкнувшись с этой проблемой, дважды нажмите DataRelation объекта DataSet со строгим 
контролем типа и укажите в появившемся диалоговом окне, что вам необходимы объекты DataRelation и ForeignKeyConstraint, и присвойте свойству Cascade значения Update и Delete. Оставьте свойство Accept Reject равным None. "
 Кто сумеет объяснить, что имел в виду мэтр? Где находится объект, на который нужно нажимать дважды? Предполагаю, что в VS 2010 нажимать нужно на что-то другое, на что именно?

Автор: jonie 7.8.2011, 10:14
открывайте редактор DataSet-а (дважды по xsd файлу тыркайте). Будет отображена схема, включающая в себя и Relation-ы между таблицами (связи помечаются линиями между таблицами).  Вот по линиям между таблицами и щелкайте дважды..

Автор: mongoloid 7.8.2011, 10:44
 Не помогает... А в перевод Сеппы, по-моему, не помешало бы внести поправку. По-моему, должно быть так: "... и присвойте правилу обновления (Update) и правилу удаления (Delete) значение Cascade. Правило принятия или отклонения (Accept Reject) оставьте равным None".

Автор: alexprogramer 23.10.2011, 22:01
Похожая проблема 1 в 1. Попытался использовать tableAdapterManager.UpdateAll стала сохраняться только самая первая таблица а изменения в остальных нет. Перечитал форумы мсдн нифига не помогает и никто толком ничего не может ответить. Проблема сто раз у всех должна была возникать, подскажите пож как решить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)