大容量插入:数据集被修改;不能执行枚举操作

本文关键字:不能 执行 枚举 操作 修改 插入 数据集 大容量 | 更新日期: 2023-09-27 18:01:59

我使用以下代码将数据保存到数据库中(我的数据来自一个文本文件,我使用Regex提取该文件中的字段):

var list = new List<IdiomExample>();
using (var db = new MyDbContext())
{
    foreach (Match match in r.Matches(input))
    {
        string val = match.Groups[1].Value;  // Idiom
        string val2 = match.Groups[2].Value; // Meaning
        string val3 = match.Groups[3].Value; // Desc
        foreach (Capture c in match.Groups["my"].Captures)
        {
            list.Add(new IdiomExample{Item = c.Value});
        }
        db.Idioms.Add(new Idiom
        {
            Verb = val,
            Meaning = val2,
            Description = val3,
            IdiomExamples = list
        });
        db.SaveChanges();
    }
}

但是当我运行我的代码时,我得到这个异常:

Collection was modified; enumeration operation may not execute.

My models:

public class Idiom
{
    public Int32 Id { get; set; }
    public string Verb { get; set; }
    public string Meaning { get; set; }
    public string Description { get; set; }
    public IList<IdiomExample> IdiomExamples { get; set; }
}
public class IdiomExample
{
    public Int32 Id { get; set; }
    public string Item { get; set; }
}

当我检查表的数据时,两条记录刚刚插入,而在习语表中应该有500条记录,在习语示例表中应该有1000条记录。我该如何解决我的问题?

大容量插入:数据集被修改;不能执行枚举操作

试一试:

using (var db = new MyDbContext())
{
    foreach (Match match in r.Matches(input))
    {
        var list = new List<IdiomExample>();
        string val = match.Groups[1].Value;  // Idiom
        string val2 = match.Groups[2].Value; // Meaning
        string val3 = match.Groups[3].Value; // Desc
        foreach (Capture c in match.Groups["my"].Captures)
        {
            list.Add(new IdiomExample{Item = c.Value});
        }
        db.Idioms.Add(new Idiom
        {
            Verb = val,
            Meaning = val2,
            Description = val3,
            IdiomExamples = list
        });
    }
    db.SaveChanges();
}