1

MySQL データベースから割り当てを削除しようとしています。そうしている間に、以下に示すように、すべての要素と偽物を削除しています。問題は、deleteboguses メソッドで for ループに到達すると、例外「EntityCommandExecutionException」がスローされることです。なぜこれを行うのか? 私は何を間違っていますか?

public static void DeleteAssignment(int id)
    {
        var deleteAssignment = from assignment in context.assignment
                               where assignment.id == id
                               select assignment;
        DeleteElement(id);
        foreach (assignment a in deleteAssignment)
        {
            context.assignment.DeleteObject(a);
        }
        context.SaveChanges();
    }

    public static void DeleteElement(int id)
    {
        var deleteElement = from element in context.element
                            where element.assId == id
                            select element;
        foreach(var e in deleteElement)
        {
            DeleteBoguses(e.id);
            context.element.DeleteObject(e);
        }
        context.SaveChanges();
    }

    public static void DeleteBoguses(int id)
    {
        var deleteBogus = from b in context.bogus
                          where b.elementId == id
                          select b;
        foreach(var b in deleteBogus)
        {
            context.bogus.DeleteObject(b);
        }
        context.SaveChanges();
    }
4

1 に答える 1

2

この修正が必要な理由の説明として、この質問はまだ技術的に未解決です。

IEnumerabledeleteElementメソッドの変数と同様にDeleteElement、ユーザーが値を列挙しているときにコレクションからアイテムを削除することはできません。

これを回避するには、ToList()関数を使用して値のコピーを作成します。これにより、値をループしながら元のリストの項目を安全に削除できます。

于 2013-03-10T04:54:41.877 に答える