2

汎用リポジトリパターンでEntityFrameworkを使用しています。次のメソッドを使用してオブジェクトを追加しました。

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()呼び出されたときにスローされますか?変更をロールバックできますか?

4

1 に答える 1

11

ObjectContextはスレッドセーフではありません。これがMSDNに関するコメントです

ObjectContextクラスはスレッドセーフではありません。マルチスレッドシナリオでは、ObjectContext内のデータオブジェクトの整合性を保証できません。

したがって、使用しない方がよいでしょうParallel.ForEach

于 2011-08-18T06:32:44.950 に答える