2008-11-13 75 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

尝试颠倒你的关系的参数。

相关问题