C# 批量插入:集合已修改;枚举操作不能执行

C# 批量插入:集合已修改;枚举操作不能执行,c#,ef-code-first,bulkinsert,C#,Ef Code First,Bulkinsert,我使用此代码将数据保存到数据库中(我的数据来自一个文本文件,我使用Regex提取该文件中的字段): 我的模型: 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&l

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

我的模型:

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; }
}
公共类惯用法
{
公共Int32 Id{get;set;}
公共字符串动词{get;set;}
表示{get;set;}的公共字符串
公共字符串说明{get;set;}
公共IList示例{get;set;}
}
公共类习语示例
{
公共Int32 Id{get;set;}
公共字符串项{get;set;}
}
当我检查我的表的数据时,两条记录刚刚插入了و,而在Idioms的表中应该是500条记录,在Idioms的表中大约是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();
}
使用(var db=new MyDbContext())
{
foreach(r.Matches中的匹配(输入))
{
var list=新列表();
字符串val=match.Groups[1].Value;//惯用法
string val2=match.Groups[2].Value;//含义
string val3=match.Groups[3].Value;//Desc
foreach(在match.Groups[“我的”]中捕获c。捕获)
{
Add(新示例{Item=c.Value});
}
db.Idioms.Add(新的惯用语)
{
动词=val,
意思=val2,
Description=val3,
示例=列表
});
}
db.SaveChanges();
}

您能指出在哪一行代码中触发了异常吗?在这一行:
db.Idioms.Add(new-Idiom(){Verb=val,means=val2,Description=val3,Idiom-examples=list})顺便问一下,list变量不应该在db.idons.Add之后或外部foreach的开始处为新实例分配一个“new”吗?否则,您将无休止地链接到该列表,并将其分配给不同的习惯用法。但是我认为你需要为每个习语列出不同的列表
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; }
}
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();
}