LINQ to Entity:由于外键约束,truncate table失败

时间:2017-11-21 20:26:42

标签: c# entity-framework linq

在我的数据库中,我有一个父表和一个子表,外键指向父表..在某些时候我必须清除两个表中的所有行。

我在Entity Framework中使用了以下代码:

foreach (ExcelRangeBase cell in ws2.Cells[2, 2, ToRow, 2])
{

    string new_cell;

    if (cell.Value == null)
    {
        continue;
    }
    else
    {

        new_cell = cell.Value.ToString();
        string link = string.Empty;
        string hyperlink = string.Empty;
        string[] ints = new_cell.Split(',');

        cell.Clear();

        for (int i = 0; i < ints.Length; i++)
        {

            string s = ints[i];

            link = @"myapplication/viewCar/ID=" + s;

            cell.Hyperlink = new ExcelHyperLink(link) { Display = s };                             

        }
    }
}

由于外键,我在第二个截断时遇到异常,尽管我先清除子表。

我该怎么办?有没有其他方法可以删除两个表的所有行?

我不知道所有行上的foreach循环是否切实可行。

1 个答案:

答案 0 :(得分:0)

这是SQL服务器的错!

您有两种方法可以实现目标:

  1. 删除外键,然后截断表格,然后重新创建外键(不要推荐此解决方案,因为它太多了,通常不会值得的

  2. 而不是-WhatIf使用Truncate(我通常使用此方法)

  3. 您的代码如下所示:

    Delete

    由于两个delete语句没有条件(没有using (MuseumDBEntities db = new MuseumDBEntities()) { db.Database.ExecuteSqlCommand("Delete from childTable"); db.Database.ExecuteSqlCommand("Delete from parentTable"); } 子句),因此将从表中删除所有行。