2012-01-03 4 views
0

У меня есть несколько таблиц в базе данных с родительской таблицей, где P имеет отношение 1: 1 к некоторым дочерним таблицам, тогда как отношение 1: M к другим дочерним таблицам.Фильтр DataSet для реляционных данных

Для этого я добавил DataSet во время разработки с помощью 'Add -> New Item -> DataSet -> DataSet1.xsd'
Итак, у меня есть все необходимые таблицы вместе с их 1: 1 или 1: M отношения ,

Я применил некоторый фильтр на адаптере главной таблицы, так что в набор данных заселяются только выбранные записи из родительской таблицы и связанных с ними дочерних записей. И, наконец, я хочу записать эти данные из DataSet в Xml-файл.

Но у меня возникает одна проблема - окончательный набор данных, который я получаю, имеет все записи из детского стола. Вместо этого он должен иметь только те дочерние записи, для которых родительская таблица имеет связанные записи.

Я использую следующий код -

ParentDataSet parentDataSet = new ParentDataSet(); 
ParentTableAdapter parentTableAdapter = new ParentTableAdapter(); 
parentTableAdapter.Fill(parentDataSet.ParentTable, column1Value); // All fine until here as I have applied filter in tableAdapter SQL 

ChildTableAdapter childTableAdapter = new ChildTableAdapter(); 
//returns all rows in the child table -- shouldn't it return only those child records for which parent dataset table is having records?? 
childTableAdapter.Fill(parentDataSet.ChildTable); 

parentDataSet.WriteXml(xmlFilePath); 

Пожалуйста, руководство, что я здесь отсутствует?

Спасибо!

ответ

2

Вы видели this article? Автор говорит, что

По умолчанию DataSet дизайнер устанавливает DataRelations между родитель-потомок таблицы, как «Связь только». Это означает, что DataSet не будет следить за соблюдением ограничений внешнего ключа на клиенте, только ваша база данных ...

Попробуйте изменить тип родитель-потомок связи с внешнего ключа. Затем проверьте свойство SelectCommandChildTableAdapter. Он фильтрует данные так, как вы ожидаете.

+0

Спасибо за ваш ответ. Это не решило проблему. Поэтому мне кажется, что я должен добавить фильтр для связанных таблиц, а также добавить для родительской таблицы. – iniki

+0

В итоге я добавил фильтр для родительских, а также связанных дочерних таблиц :-) – iniki

+0

@iniki Поскольку мой ответ на самом деле не решает проблему, вы должны отправить свое решение в виде отдельного ответа и принять его. (Вы можете принять свой собственный ответ на заданный вами вопрос.) – Kimberly