C# 从SQL数据库中删除

C# 从SQL数据库中删除,c#,mysql,linq,C#,Mysql,Linq,我正在尝试从MySQL数据库中删除一个分配。在这样做的同时,我删除了所有元素和bogues,如下所示。问题是,当它到达deleteboguses方法中的for循环时,它会抛出一个异常“EntityCommandExecutionException”,你知道它为什么这样做吗?我做错了什么 public static void DeleteAssignment(int id) { var deleteAssignment = from assignment in contex

我正在尝试从MySQL数据库中删除一个分配。在这样做的同时,我删除了所有元素和bogues,如下所示。问题是,当它到达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();
    }

作为对您需要此修复的原因的解释,这个问题在技术上仍然是开放的

IEnumerable
deleteElement
方法中的
deleteElement
变量一样,在枚举值时,将不接受用户从其集合中删除项


要解决这个问题,可以使用
ToList()
函数创建值的副本。这样可以安全地删除原始列表中的项目,同时仍然循环遍历其值。

Hello!:)请发布异常及其关联的消息。System.Data.EntityCommandExecutionException未经处理消息=执行命令定义时出错。有关详细信息,请参阅内部异常。什么是内部异常?已存在与此连接关联的打开DataReader,必须先关闭该连接。这表示在其他对象处于从数据库读取和物化的状态时,已进行数据库读取。多个活动结果集可能会有所帮助,但通常也可以通过强制执行linq语句来防止。在这里,执行
deleteBogus.ToList()
可能会有所帮助。