将在ObjectContext.Add中使用Parallel.ForEach

Ran*_*ray 2 entity-framework-4 objectcontext parallel.foreach

我正在使用Entity Framework和通用存储库模式.我使用以下方法添加对象.

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

我也在考虑扩展它以支持多个实体.

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

   return SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

在上述场景中使用Parallel.ForEach而不是foreach循环会有实际好处吗?

另外因为我没有SaveChanges()在循环结束之前调用,如果有让我们说主键违规,它会被抛入循环内部还是SaveChanges()被调用时?我可以回滚更改吗?

Era*_*nga 10

ObjectContext不是线程安全的.这是关于MSDN的评论

ObjectContext类不是线程安全的.在多线程方案中无法确保ObjectContext中数据对象的完整性.

所以最好不要使用Parallel.ForEach.