Bezdepbonusu7Программирование: статьи и ответы

Вопрос

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

Автор вопроса: Ian BoydОтветов: 5

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

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

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

database

Ответы

Ответ 1 · рейтинг 3 · goamn

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

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

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

relation.Nested = true;
ds.Relations.Add(relation);

Ответ 2 · рейтинг 1 · Steven A. Lowe

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

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

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

Ответ 3 · Satish

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

Ответ 4 · Atanas Korchev

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

Ответ 5 · Lemo

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы