Будет ли преимущество Parallel.ForEach в ObjectContext.Add - PullRequest
2 голосов
/ 18 августа 2011

Я использую Entity Framework с общим шаблоном хранилища. Я использовал следующий метод для добавления объекта.

public int Add<TEntity>(TEntity entity) where TEntity : class
{
   DataContext.AddObject(GetEntityName<TEntity>(), entity);
   return SaveChanges();
}

Я также подумываю расширить это для поддержки нескольких сущностей.

public int Add<TEntity>(TEntity[] collection) where TEntity : class
{
   foreach (TEntity item in collection)
   {
     DataContext.AddObject(GetEntityName<TEntity>(), item);
   }

   return SaveChanges();
}

Будет ли реальная выгода от использования Parallel.ForEach вместо цикла foreach в приведенном выше сценарии?

Кроме того, поскольку я не вызывал SaveChanges() до конца цикла, если есть, скажем, нарушение первичного ключа , будет ли он брошен в цикл или когда вызывается SaveChanges() ? Смогу ли я откатить изменения?

1 Ответ

10 голосов
/ 18 августа 2011

ObjectContext не является потокобезопасным.Вот замечание по MSDN

Класс ObjectContext не является потокобезопасным.Целостность объектов данных в ObjectContext не может быть обеспечена в многопоточных сценариях.

Поэтому лучше не использовать Parallel.ForEach.

...