2011-08-18 3 views
2

일반 저장소 패턴과 함께 Entity Framework를 사용하고 있습니다. 다음 메소드를 사용하여 객체를 추가했습니다.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(); 
} 

대신 위의 시나리오에서 foreach 루프의 Parallel.ForEach를 사용의 실제 효과가있을 것인가? 이 경우 내가 루프가 끝날 때까지 SaveChanges()라고하지 않았 또한 때문에

기본 키 위반, 그것은 루프 내부에 던져 질 것이다하거나 SaveChanges()이라고 말할 수? 변경 사항을 롤백 할 수 있습니까?

답변

10

ObjectContext은 스레드로부터 안전하지 않습니다. MSDN에 대한 언급이 있습니다

ObjectContext 클래스는 스레드로부터 안전하지 않습니다. 다중 스레드 된 시나리오에서는 ObjectContext의 데이터 개체의 무결성을 보장 할 수 없습니다.

Parallel.ForEach을 사용하지 않는 것이 좋습니다.

+0

ObjectContext에 대한 모든 액세스를 잠 그려면 Parallel.ForEach를 사용할 수 있습니다. 추가되는 각 항목에 대해 공정한 비트의 생성 로직이 있다면, 그만한 가치가있을 수 있습니다. –

관련 문제