2011-08-18 39 views
2

我正在使用实体框架与通用存储库模式。我已经使用下面的方法来添加一个对象。将使用ObjectContext.Add中的Parallel.ForEach好处

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()叫?我能够回滚更改吗?

回答

10

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

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

所以最好不要使用Parallel.ForEach

+0

如果您愿意锁定对ObjectContext的所有访问,则可以使用Parallel.ForEach。如果每个项目都添加了相当多的创建逻辑,这可能是值得的。 –