如何从数据集中删除数据表(具有一堆关系)

Ste*_*ve0 10 .net datatable constraints foreign-keys dataset

我试图删除加载到数据集中的数据表,并且已经相关.这是我尝试的代码.

domain.EnforceConstraints = false;
if (domain.Tables["TABLE_NAME"] != null) 
{ 
    domain.Tables["TABLE_NAME"].ChildRelations.Clear(); 
    domain.Tables["TABLE_NAME"].ParentRelations.Clear(); 
    domain.Tables.Remove("TABLE_NAME"); 
}
domain.EnforceConstraints = true;
Run Code Online (Sandbox Code Playgroud)

由于存在外键约束,这会在删除表时抛出异常.不幸的是,逻辑的方式我不知道约束的名称是什么[所以我不能硬编码].

有没有以更容易的方式完成此任务,或者我可以获得一些关于如何找到并删除导致我的问题的约束的建议.

先谢谢,史蒂夫

- - - - - - - - - - - - - 回答 - - - - - - - - - - - - -

我不被允许回答我自己的问题所以这是我提出的解决方案.此代码段现在适用于我.我必须将关系传递到另一个表并从那里删除约束.

    if (domain.Tables["TABLE_NAME"] != null) 
    {

        for (int f = domain.Tables["TABLE_NAME"].ChildRelations.Count -1; f >=0; f--)
        {
            domain.Tables["TABLE_NAME"].ChildRelations[f].ChildTable.Constraints.Remove(domain.Tables["TABLE_NAME"].ChildRelations[f].RelationName);
            domain.Tables["TABLE_NAME"].ChildRelations.RemoveAt(f);
        }
        domain.Tables["TABLE_NAME"].ChildRelations.Clear();
        domain.Tables["TABLE_NAME"].ParentRelations.Clear();
        domain.Tables["TABLE_NAME"].Constraints.Clear();
        domain.Tables.Remove("TABLE_NAME"); 
    }
Run Code Online (Sandbox Code Playgroud)

Dav*_*ras 5

在从数据集中删除表之前,尝试清除其所有的constaints,如下所示:

domain.Tables["TABLE_NAME"].Constraints.Clear();
Run Code Online (Sandbox Code Playgroud)

应该工作,然后您应该能够从数据集中删除它.

如果你有PK Constraint的问题无法删除尝试这个:

        var myTable = domain.Tables["TABLE_NAME"];

        for (int i = myTable.Constraints.Count - 1; i >= 0; --i)
        {
            if (myTable.Constraints[i] is System.Data.ForeignKeyConstraint)
            {
                myTable.Constraints.Remove(myTable.Constraints[i]);
            }
        }
Run Code Online (Sandbox Code Playgroud)