【发布时间】:2011-09-02 17:20:44
【问题描述】:
我正在尝试删除已加载到数据集中并与之相关的数据表。 这是我尝试的代码。
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;
由于存在外键约束,这会在删除表时引发异常。不幸的是,逻辑的方式是我不知道约束的名称是什么[所以我不能硬编码它]。
是否可以以更简单的方式完成此任务,或者我能否就如何定位和删除导致我的问题的约束获得一些建议。
提前感谢,史蒂夫
--------------答案------ ----
我不被允许回答我自己的问题,所以这是我想出的解决方案。 这段代码 sn-p 现在对我有用。我不得不将关系移动到另一个表并从那里删除约束。
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");
}
【问题讨论】:
-
域是一个数据集(System.Data.Dataset 类型)但是是的,数据最初是从 SQL SERVER 2005 加载的
-
@Chris 他正在使用 ADO.NET 对象在内存中工作,数据库引擎与此上下文无关。
-
我发现我不需要做三行 domain.Tables["TABLE_NAME"].ChildRelations.Clear(); domain.Tables["TABLE_NAME"].ParentRelations.Clear(); domain.Tables["TABLE_NAME"].Constraints.Clear();
标签: .net datatable dataset foreign-keys constraints