在 ObjectContext.Add 中使用 Parallel.ForEach 会带来好处

发布于 2024-11-30 07:34:49 字数 716 浏览 4 评论 0原文

我正在将实体框架与通用存储库模式一起使用。我使用了以下方法来添加对象。

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() 吗?我可以回滚更改吗?

I am using Entity Framework with the generic repository pattern. I have used the following method to add an object.

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

I am also thinking of extending this to support multiple entities.

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

   return SaveChanges();
}

Will there be an actual benefit in using Parallel.ForEach instead of the foreach loop in the above scenario?

Also because I haven't called SaveChanges() until the end of the loop, if there is lets say a primary key violation, will it be thrown inside the loop or when SaveChanges() is called? Will I be able to rollback the changes?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

情话难免假 2024-12-07 07:34:49

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

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

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

ObjectContext is not thread safe. Here's the remark on MSDN

The ObjectContext class is not thread safe. The integrity of data
objects in an ObjectContext cannot be ensured in multithreaded
scenarios.

So better not use Parallel.ForEach.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文