Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Базы данных под .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 стала сохраняться только самая первая таблица а изменения в остальных нет. Перечитал форумы мсдн нифига не помогает и никто толком ничего не может ответить. Проблема сто раз у всех должна была возникать, подскажите пож как решить. |