2008-11-13 74 views
4

考慮包含SQL Server表:ADO.NET:將DataRelation添加到數據集;哪個是父母,哪個是孩子?

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

我填與表SqlDataSet,現在我想的父子關係添加到DataSet:

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

現在this guy用途:

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 
); 

因此,這是什麼呢?爲什麼他的工作?有什麼例外?爲什麼當他有空時他可以創造約束?

上帝在這裏很熱。

回答

3

哇沒有人有正確的答案....

的問題是,你讀的例子是標籤下的「第3步 - 取回數據並創建嵌套關係」。

如果您想要在SAME TABLE(嵌套)的兩列之間添加關係,那麼您必須在其網站上將「嵌套」變量設置爲true(在添加之前)。

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

這正是我需要知道 - MSDN不會給我一個明確的答案, 照常。 tyvm! – 2012-04-27 14:28:52

1

的父子關係也被稱爲一個一對多的關係,其中「一」是家長和「多」是孩子

孩子有把握關鍵一列(也稱爲「外鍵」列)

在您的示例中,它可能不會像父ID一樣使用空值;通過false以避免啓用約束可能會使錯誤消失

0

他的作品可能因爲結果集中的所有行都可能具有parentID的原因之一。子列是引用的列,父列是子列所引用的列。換句話說,孩子是指父母。所以在你的情況下,Id是父列,parentId是子列。

0

嘗試顛倒你的關係的參數。

相關問題