我搜索了我的问题,但找不到答案,很抱歉,如果重复的话,请转给我以解决问题。
我有一个跟踪对象'TestRun'的实体框架核心设置。我创建了一个TestRuns列表,希望将它们添加到DbContext中,然后将它们写入数据库中。这在常规的ForEach
循环中可以很好地工作,但是当我尝试在using块中使用List.Foreach
时,Visual Studio建议一次性对象已被处置。 “访问已处置的封盖”。
using (var context = new TestResultsContext())
{
_testRuns.ForEach(t => context.Add(t));
context.SaveChanges();
}
我认为这与“延迟加载”有关,但是ForEach
是无效的返回值,因此无法强制将结果枚举。
答案 0 :(得分:3)
List<T>.ForEach
不是LINQ方法,它来自List<T>
类,它也不是惰性计算的。因此,对于Visual Studio警告,并非所有警告都应考虑在内,这就是其中之一。分析仪并不完美。
但是,您不需要使用任何这些方法,因为正确的方法是使用DbSet<T>
的方法AddRange
:
using (var context = new TestResultsContext())
{
context.TestRuns.AddRange(_testRuns);
context.SaveChanges();
}