나는 다음과 같은 한 :단일 컨텍스트
HandleJob이있다 await Task.WhenAll(
Task.Run(() => HandleJob("one"),
Task.Run(() => HandleJob("two"),
Task.Run(() => HandleJob("three"));
:
private async Task HandleJob(string param) {
using (var db = new DbContext()) {
_numberService = new NumberService(db);
_numberService.DoThis(param);
}
}
그리고 NumberService이 있습니다 :
public class NumberService {
private readonly DbContext db;
private CommService _commService;
public NumberService(DbContext db) {
this.db = db;
_commService = new CommService(db);
}
public void DoThis(string param){
_commService.DoThat(param);
}
}
그리고 CommService입니다 이 :
public class CommService {
private readonly DbContext db;
public CommService(DbContext db) {
this.db = db;
}
public void DoThat(string param){
db.Things.Add(param);
db.SaveChanges();
}
}
나는이를 실행하려고하면 나는 다음을 참조 문제로 실행 해요 :
형 System.InvalidOperationException 의 예외가 EntityFramework.dll에서 발생했지만 사용자 코드에서 처리되지 않았습니다 컨텍스트 은 모델을 만드는 동안 사용할 수 없습니다. 이 예외는 OnModelCreating 메서드 내에서 컨텍스트가 사용되거나 동일한 컨텍스트 인스턴스에 여러 스레드가 동시에 액세스하는 경우 이 던져 질 수 있습니다. DbContext 및 관련 클래스의 인스턴스 멤버는 스레드로부터 안전하지 않을 수 있습니다.
내가 뭘 잘못하고 있니? 나는 각 스레드에 대해 새로운 dbContext
을 사용함으로써 나는 괜찮을 것이라고 생각했다.
나에게 잘 보입니다. 나는 전에 그 오류를 보았다. 그것은 기본적으로 다양한 것을 의미 할 수 있습니다. 이 상황이 발생하면 전체 콜 스택을 게시하십시오. await 키워드 앞에 다음과 같이 입력하십시오.'(var dbCOntext = new DbContext())를 사용하십시오. dbCOntext.Database.Initialize (force : false); ' –
스레드 문제가 아닐 수도 있습니다. 아직 존재하지 않거나 아직 생성 중일 때 새로운 컨텍스트에서 코드를 실행 중일 수 있습니다. – Baddack
db.Things.Add (param); param은 문자열이고 인스턴스 인 경우 잘못 되었기 때문에 잘못되었습니다. 그런 다음 예외를 던지기 시작합니다. 이것은 –