List.Foreach использует одноразовый предмет в блоке Using - PullRequest
0 голосов
/ 03 октября 2018

Я искал и не смог найти ответ на свой вопрос, извините, если это дубликат, пожалуйста, направьте меня к правильному решению.

У меня есть настройка ядра платформы сущностей, которая отслеживает объект «TestRun».Я создал список TestRuns и хочу добавить их в DbContext, а затем записать их в базу данных.Это нормально работает с обычным циклом ForEach, но когда я пытаюсь использовать List.Foreach внутри блока использования, Visual Studio предполагает, что одноразовый объект уже удален.«Доступ к удаленному закрытию».

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

Я полагаю, что это связано с «отложенной загрузкой», но ForEach является возвращением пустоты, поэтому нет никакого способа заставить результат перечислить.

1 Ответ

0 голосов
/ 03 октября 2018

List<T>.ForEach - это не метод LINQ, это класс List<T>, и он также не лениво оценивается.Что касается предупреждений Visual Studio, не все предупреждения следует принимать во внимание, это одно из них.Анализаторы не идеальны.

Однако вам не нужно использовать ни один из этих методов, поскольку правильным способом является использование метода DbSet<T> AddRange:

using (var context = new TestResultsContext())
{
    context.TestRuns.AddRange(_testRuns);
    context.SaveChanges();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...