ASP의 경우 "모델을 만드는 동안에는 컨텍스트를 사용할 수 없습니다." 예외입니다.NET 아이덴티티
AccountApiController에 전화를 걸 때 이 문제가 발생하는 이유는 무엇입니까?방법을 등록하시겠습니까?
- 문맥을 사용하려는 것은 무엇입니까?
- 무엇이 문맥을 창조하려고 노력하고 있습니까?
- 우리는 어떻게 이것을 피할 수 있습니까?
- 이걸 어떻게 디버그합니까?
"메시지": "오류가 발생했습니다." ,
"예외 메시지":"모델을 만드는 동안에는 컨텍스트를 사용할 수 없습니다.이 예외는 컨텍스트가 OnModelCreating 메서드 내에서 사용되거나 여러 스레드에서 동시에 동일한 컨텍스트 인스턴스에 액세스하는 경우 발생할 수 있습니다.DbContext 및 관련 클래스의 인스턴스 멤버는 스레드 안전성이 보장되지 않습니다." ,
"예외 유형":"시스템.잘못된 작업예외",
"스택 추적":"
시스템에서.웹.Http.APIController.d_1입니다.다음으로 이동()
예외가 발생한 이전 위치의 스택 추적 끝
시스템에서.런타임.컴파일러 서비스.작업 대기자입니다.성공하지 못한 경우 던지기(작업)
시스템에서.런타임.컴파일러 서비스.작업 대기자입니다.NonSuccessAndDebugger 알림 처리(작업 > 작업)
시스템에서.웹.Http.발송인.HttpControllerDispatcher.d_0입니다.다음으로 이동()"
문제는 우리가 MS가 권장하는 공장 패턴을 사용하지 않고 있다는 것입니다.
Factory 구현을 사용하여 OWIN 컨텍스트에서 UserManager 인스턴스를 가져올 수 있습니다. ...응용 프로그램에 대한 요청별로 UserManager 인스턴스를 가져오는 권장 방법입니다.
여러 요청과 스레드가 DbContext를 공유했기 때문에 "동일한 컨텍스트 인스턴스는 여러 스레드에 의해 동시에 액세스됩니다."
다음 내용이 맞습니다.UserManagerFactory 함수에 대한 각 호출에 대해 MyDbContext의 새 인스턴스를 만듭니다.
UserManagerFactory
= () => new UserManager<IdentityUser>(new UserStore<IdentityUser>(new MyDbContext()));
다음은 올바르지 않습니다.비슷하게 생겼지만 UserManagerFactory에 대한 각 호출에 대해 새 인스턴스를 만들지는 않습니다.이것은 우리가 사용하던 것입니다, 우리의 사이트가 망가졌습니다.
var userStore = new UserStore<IdentityUser>(new MyDbContext());
var userManager = new UserManager<IdentityUser>(userStore);
UserManagerFactory = () => userManager;
이 오류는 잘못된 경우에도 발생할 수 있습니다.connectionString
확인 여부connectionString
유효합니다(타포 등 없음).
OnModelCreating 메서드를 재정의합니까?만약 그렇다면, 당신은 그것을 공유하거나 전체 컨텍스트 클래스를 공유할 수 있습니까?
그렇지 않은 경우 오류 메시지의 다음 사항에 주의해야 합니다.
또는 여러 스레드에서 동시에 동일한 컨텍스트 인스턴스에 액세스하는 경우.DbContext 및 관련 클래스의 인스턴스 멤버는 스레드 안전성이 보장되지 않습니다.
그래도 도움이 되지 않는다면 Visual Studio에서 만든 변경되지 않은 웹 API 프로젝트를 사용합니까?
TL&DR: 모델 시드를 목표로 하고 있고 엔티티 프레임워크를 사용하고 있다면, 다음 링크를 검토할 것을 강력히 제안합니다. https://learn.microsoft.com/en-us/ef/core/modeling/data-seeding
이 링크는 마이그레이션 자체 중에 데이터를 직접 시드하는 방법을 자세히 설명합니다.이것은 일반적으로 응용프로그램의 시작 대신 데이터베이스를 작성하는 동안 데이터를 시드할 때 유용합니다.
Table/View에서 레코드를 가져오는 경우 DB 객체에 대한 액세스 권한이 충분한지 확인합니다.
저도 같은 문제가 있었고 실행하여 해결했습니다.
sp_change_users_login [ @Action = ] 'action' [ , [ @UserNamePattern = ] 'user' ] [ , [ @LoginName = ] 'login' ] [ , [ @Password = ] 'password' ] [;]
sp_change_users_login 'update_one' 'dbuser' 'dblogin'
MySQL과 함께 다중 계층 아키텍처에서 EF Code First를 사용하고 있으며 동일한 예외가 있으며 DB Context Class 구조 작업 내에서 다음 행을 사용합니다.
Database.SetInitializer<EntitiesName>(null);
Shaun Luttin의 주요 답변에 동의하지만,
저의 경우: 배포 후 이 오류가 발생하여 SSL 인증서를 삽입한 후 Hsts Preload를 사용했기 때문이라는 것을 알게 되었습니다.이 줄의 주석을 제거하면 리디렉션이 해결되었고, 이 오류가 완전히 해결되었습니다.
//app.UseHsts(options => options.MaxAge(days: 18 * 7).IncludeSubdomains().Preload());
언급URL : https://stackoverflow.com/questions/21344232/context-cannot-be-used-while-the-model-is-being-created-exception-with-asp-net
'programing' 카테고리의 다른 글
UITextView에 커서가 표시되지 않음 (0) | 2023.08.23 |
---|---|
UICollectionView에서 레이아웃을 동적으로 설정하면 설명할 수 없는 contentOffset 변경이 발생함 (0) | 2023.08.23 |
UIView에서 두 모서리를 둥글게 만듭니다. (0) | 2023.08.23 |
re."예기된 문자열 또는 바이트와 유사한 개체"로 하위 오류가 발생 (0) | 2023.08.23 |
빠져나오지 않고 html을 핸들 바 템플릿에 삽입합니다. (0) | 2023.08.23 |