ADO.NET: добавление связи данных в набор данных; какой родитель, а какой ребенок?

Рассмотрим таблицу SQL Server, содержащую:

ID   ParentID   Text
===  =========  =============
1    (null)     Product
2    (null)     Applications
3    1          Background
4    1          Details 
5    2          Mobile

Я заполняю SqlDataSet таблицей, и теперь я хочу добавить отношение Parent-Child к DataSet:

public DataRelation(
    string relationName,
    DataColumn parentColumn,
    DataColumn childColumn,
    bool createConstraints
)

Теперь этот парень использует:

DataRelation relation = newDataRelation("ParentChild",
    ds.Tables[0].Columns["ID"], //parentColumn
    ds.Tables[0].Columns["ParentID"] //childColumn, 
    true //createConstraints
);

Но когда я это сделаю, я получаю исключение:

This constraint cannot be enabled 
as not all values have corresponding parent values.

Люди предлагали передать "ложь" вместо createConstraints; но тогда почему у него это работает?

А что такое ребенок и что такое родитель? Я бы подумал, что дочерний столбец - это столбец, который должен указывать на родительский, а родительский столбец - это то, что выполняет указание, что меняет отношение:

DataRelation relation = newDataRelation("ParentChild",
    ds.Tables[0].Columns["ParentID"], //parentColumn
    ds.Tables[0].Columns["ID"], //childColumn
    true //createConstraints
);

Так что это? Почему его работа? Что за исключением? Почему он может создавать ограничение, когда у него есть нули?

Боже, здесь жарко.


person Ian Boyd    schedule 13.11.2008    source источник


Ответы (5)


Ух ты, ни у кого не было правильного ответа ....

Проблема в том, что пример, который вы читали, находится под ярлыком «Шаг 3 - Получение данных и создание вложенных отношений».

Если вы хотите добавить связь между двумя столбцами ОДНОЙ ТАБЛИЦЫ (вложенной), вы должны установить для переменной «Вложенная» значение true (перед ее добавлением), как показано на его веб-сайте.

relation.Nested = true;
ds.Relations.Add(relation);
person goamn    schedule 18.04.2011
comment
Это именно то, что мне нужно было знать - MSDN, как обычно, не дала мне прямого ответа. тывм! - person Mass Dot Net; 27.04.2012

отношения родитель-потомок также называются отношениями «один-ко-многим», где «один» - это родитель, а «многие» - это потомок.

у дочернего элемента есть столбец, содержащий ключ родителя (он же столбец «внешний ключ»)

в вашем примере ему, вероятно, не нравятся нули для родительского идентификатора; передача false, чтобы избежать включения ограничений, скорее всего, устранит ошибку

person Steven A. Lowe    schedule 13.11.2008

Одна из причин, по которой он работает, может заключаться в том, что все строки в наборе результатов могут иметь parentID. Дочерний столбец - это столбец, на который ссылается, а родительский столбец - это столбец, на который ссылается дочерний столбец. Другими словами, дочерний элемент относится к родителю. Итак, в вашем случае Id - это родительский столбец, а parentId - дочерний столбец.

person Satish    schedule 13.11.2008

Попробуйте изменить параметры вашего отношения.

person Atanas Korchev    schedule 13.11.2008

Ознакомьтесь с этим В разделе Data Relationships Tittle он может быть ответом на то, что Родитель и что такое ребенок

person Lemo    schedule 07.02.2012