나는 올바른 방향으로 생각하지 않을 것입니다. 필자는 Dependency Injection과 ASP.Net Core를 처음 접했습니다.종속성 주입을 통한 백그라운드 작업을위한 DbContext
필자는 ASP.Net 핵심 웹 사이트를 갖고 있으며,이 작업 중 하나는 Excel 시트에서 사용자가 업로드 할 데이터베이스로 데이터를 가져 오는 것입니다. 엑셀 시트는 거대 할 수 있고 데이터 변환 작업은 시간이 걸리기 때문에 백그라운드에서 수행해야합니다. 즉, 사용자가 시트를 업로드하면 응답이 즉시 전송되고 백그라운드 작업/스레드가 데이터를 가져옵니다.
Task.Run(() => ProcessImport(model));
의 I가로 실행 문제 프로세스 가져 오기 방법은 ASP.Net 의존성 삽입 컨테이너를 통해 AppDbContext 접근 저장소 클래스가 서비스를 호출하는 것입니다 :
나는으로 백그라운드 작업을 실행하려고 Scoped로 추가되고 응답이 반송되면 컨텍스트가 삭제됩니다. 처리가 끝난 후 컨텍스트를 사용할 수 없다는 런타임 예외가 발생합니다.내 질문에이 상황을 처리하는 가장 좋은 방법은 무엇입니까? AppDbContext 싱글 톤을 만들어야합니까? ProcessImport 메서드에서 AppDbContext의 새 인스턴스를 만들고이를 전달해야합니까? DbContext는 스레드로부터 안전하지 않으므로 읽었습니다. 좋은 접근 방법입니까?
을 아니요 : https://stackoverflow.com/questions/3266295/net-entity-framework-and-transactions/3266481#3266481 – Steven
맞지만 다른 스레드에서 실행중인 작업을 다루는 방법은 DbContext에 액세스해야합니까? –
어쨌든 이것은 위험한 패턴입니다. ASP.Net 응용 프로그램을 사용하여 [장기 실행 화재 및 잊어 버리는 작업] (http://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx)을 사용해서는 안됩니다. 당신이 올바르게한다면, 그 일은 그 자체의 과정에서 실행되고 전체 DI 이슈는 사라집니다. –