ASP.Net Core 2.0 및 Entity Framework Core로 개발하는 동안 최근에 발생한 문제에서 오류 발생: "이전 작업이 완료되기 전에 이 컨텍스트에서 두 번째 작업이 시작되었습니다." 이 예외는 다음에 의해 발생됩니다. InvalidOperationException은 이전 작업이 완료되기 전에 동일한 컨텍스트에서 여러 작업이 시작되었음을 나타냅니다.
코드베이스를 조사한 결과 다양한 속성 및 관련 데이터로 엔터티 목록을 채우는 메서드가 원인으로 식별되었습니다. 문제가 있는 방법에는 포함 문을 사용하여 관련 엔터티를 통합하고 이러한 엔터티를 뷰 모델에 매핑하는 쿼리가 포함되었습니다.
근본적인 문제는 DbContext가 애플리케이션 전체에서 해결되고 활용되는 방식에 뿌리를 두고 있습니다. 종속성 주입을 위해 IoC(Inversion of Control)를 사용하는 경우 DbContext를 Transient로 등록해야 합니다. 여기에는
services.AddDbContext<MyContext>(ServiceLifetime.Transient);
대신 다음 코드 조각을 사용하는 것이 필요합니다.
services.AddTransient<MyContext>();
또는
services.AddDbContext<MyContext>();
기본 동작은 DbContext를 범위가 지정된 대로 추가하는 것입니다. 여러 스레드가 컨텍스트에 액세스할 때 충돌이 발생할 수 있습니다.
또한 비동기 작업과 비동기 람다 표현식은 이 문제를 악화시킬 수 있습니다. DbContext에 Transient를 사용하면 각 클래스에 인스턴스가 부여되어 여러 클래스에 걸쳐 엔터티가 변경되지 않습니다.
이 예외에 대한 자세한 내용은 다음 리소스를 참조하세요. [https://docs.microsoft.com/en-us/ef/core/miscellaneous/warnings/second-Operation-started](https://docs.microsoft.com/en-us/ef/core/miscellaneous/ 경고/2차 작업 시작)
위 내용은 내 Entity Framework 핵심 응용 프로그램에서 '두 번째 작업 시작됨' 오류가 발생하는 이유는 무엇이며 어떻게 해결할 수 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!