ADO.NET: добавление DataRelation к DataSet; кто родитель, а кто ребенок? - PullRequest
4 голосов
/ 13 ноября 2008

Рассмотрим таблицу 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
);

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

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

Ответы [ 5 ]

3 голосов
/ 18 апреля 2011

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

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

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

relation.Nested = true;
ds.Relations.Add(relation);
1 голос
/ 13 ноября 2008

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

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

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

0 голосов
/ 07 февраля 2012

Проверьте это В разделе «Отношения данных» Tittle это может быть ответом того, кто является родителем, а что дочерним

0 голосов
/ 14 ноября 2008

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

0 голосов
/ 13 ноября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...