Entity Framework 6의 다중 비동기?
이것은 내 코드입니다.
var banner = context.Banners.ToListAsync()
var newsGroup = context.NewsGroups.ToListAsync()
await Task.WhenAll(banner, newsGroup);
하지만 컨트롤러에서 함수를 호출했을 때. 오류를 보였습니다
이전 비동기 작업이 완료되기 전에이 컨텍스트에서 두 번째 작업이 시작되었습니다. 이 컨텍스트에서 다른 메서드를 호출하기 전에 비동기 작업이 완료되었는지 확인하려면 'await'를 사용하십시오. 모든 인스턴스 멤버는 스레드 안전이 보장되지 않습니다.
이 문제를 해결하도록 도와주세요.
예외는 한 번에 허용되는 컨텍스트 당 하나의 비동기 작업 만 있음을 명확하게 설명합니다.
따라서 await
오류 메시지에서 알 수 있듯이 한 번에 하나씩 수행 해야 합니다.
var banner = await context.Banners.ToListAsync();
var newsGroup = await context.NewsGroups.ToListAsync();
또는 여러 컨텍스트를 사용할 수 있습니다.
var banner = context1.Banners.ToListAsync();
var newsGroup = context2.NewsGroups.ToListAsync();
await Task.WhenAll(banner, newsGroup);
데이터 공급자 삽입에 IoC 컨테이너를 사용하는 경우 수명주기에 "일시적"또는 "PerWebRequest"유형을 사용하는 것이 좋습니다.
예 : https://github.com/castleproject/Windsor/blob/master/docs/lifestyles.md
예를 들어 리포지토리 패턴과 함께 종속성 주입에 Unity를 사용하는 경우 create / update / delete와 함께 두 개 이상의 컨텍스트를 사용하면 다음 오류가 발생합니다.
두 개체가 서로 다른 ObjectContext 개체에 연결되어 있으므로 두 개체 간의 관계를 정의 할 수 없습니다.
이것은를 사용하여 해결할 수 있습니다 PerRequestLifetimeManager
. 여기에 더 많은 정보 :
C # EF6는 Unity-Asp.Net Web Api를 사용하여 하나의 컨텍스트에 대해 여러 비동기 호출을 수행합니다.
container.RegisterType<DbContext>(new PerRequestLifetimeManager());
container.RegisterType<ISupplierRepository, SupplierRepository>();
container.RegisterType<IContactRepository, ContactRepository>();
참고 URL : https://stackoverflow.com/questions/20628792/multi-async-in-entity-framework-6
'developer tip' 카테고리의 다른 글
A () = A ()-왜 컴파일됩니까? (0) | 2020.09.19 |
---|---|
내 json 파일을 찾을 수없는 이유는 무엇입니까? (0) | 2020.09.19 |
Git에서 한 파일의 특정 버전을 어떻게 확인할 수 있습니까? (0) | 2020.09.19 |
Xcode 4로 릴리스 빌드 실행 (0) | 2020.09.19 |
인텔이 프로세서에서 내부 RISC 코어를 숨기는 이유는 무엇입니까? (0) | 2020.09.19 |