List.Foreach在Using块中使用了一次性物品

时间:2018-10-02 22:08:27

标签: c# linq entity-framework-core

我搜索了我的问题,但找不到答案,很抱歉,如果重复的话,请转给我以解决问题。

我有一个跟踪对象'TestRun'的实体框架核心设置。我创建了一个TestRuns列表,希望将它们添加到DbContext中,然后将它们写入数据库中。这在常规的ForEach循环中可以很好地工作,但是当我尝试在using块中使用List.Foreach时,Visual Studio建议一次性对象已被处置。 “访问已处置的封盖”。

using (var context = new TestResultsContext())
{
    _testRuns.ForEach(t => context.Add(t));
    context.SaveChanges();
}

我认为这与“延迟加载”有关,但是ForEach是无效的返回值,因此无法强制将结果枚举。

1 个答案:

答案 0 :(得分:3)

List<T>.ForEach不是LINQ方法,它来自List<T>类,它也不是惰性计算的。因此,对于Visual Studio警告,并非所有警告都应考虑在内,这就是其中之一。分析仪并不完美。

但是,您不需要使用任何这些方法,因为正确的方法是使用DbSet<T>的方法AddRange

using (var context = new TestResultsContext())
{
    context.TestRuns.AddRange(_testRuns);
    context.SaveChanges();
}