将在ObjectContext.Add中使用Parallel.ForEach

时间:2011-08-18 05:37:43

标签: entity-framework-4 objectcontext parallel.foreach

我正在使用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(),如果有人说主键违规,它会被抛入循环内部还是{{} 1}}被称为?我可以回滚这些更改吗?

1 个答案:

答案 0 :(得分:10)

ObjectContext不是线程安全的。这是MSDN上的评论

  

ObjectContext类不是线程安全的。数据的完整性   在多线程中无法确保ObjectContext中的对象   场景。

最好不要使用Parallel.ForEach