이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 27156|회답: 2

[출처] EF DbContext는 컨텍스트가 유일함을 보장합니다

[링크 복사]
게시됨 2020. 8. 22. 오전 10:21:31 | | |
EF를 사용해 데이터베이스를 조작하고, 동일한 HTTP 요청에서 DbContext(데이터베이스 연산 컨텍스트 클래스)를 추출하여 고유성을 보장하고, 두 가지 방식을 사용해 Entity Framework 컨텍스트의 고유성을 보장하며, .NET Core 플랫폼의 솔루션이 첨부됩니다.

옵션 1

객체가 전역적으로 고유하다는 보장이 있다면, 분명히 고전적인 디자인 패턴인 싱글톤 모드를 떠올릴 것입니다. 사용할 객체가 스레드 내에서 고유해야 한다면?

데이터 슬롯: CallContext, msdn의 callcontent에 대한 설명을 참고하세요.

CallContext는 메서드 호출을 위한 스레드 로컬 저장소와 유사한 전용 컬렉션 객체로, 각 논리 실행 스레드마다 고유한 데이터 슬롯을 제공합니다. 데이터 슬롯은 다른 논리 스레드의 호출 컨텍스트 간에 공유되지 않습니다. 객체는 실행 코드의 경로를 따라 전파되고 해당 경로의 개별 객체들이 검사할 때 CallContext에 추가할 수 있습니다.

즉, 현재 스레드는 객체를 스레드의 로컬 저장소에 저장하고, 스레드가 파괴될 때 객체도 파괴됩니다.

코드 사용:



사용 시나리오: 개인적으로는 객체가 스레드 내에서 전역적으로 사용되어야 할 때 사용되며, 다른 스레드 패키지 확장 스레드가 접근할 수 없을 때 사용됩니다. 예를 들어, EF의 데이터 컨텍스트에서는 각 요청마다 스레드가 생성되고, 이 시점에서 서로 다른 함수를 사용할 데이터 컨텍스트 객체가 생성되어 트랜잭션 문제를 피하기 위해 함께 커밋됩니다. 물론 어떤 사람들은 변수를 만들 수 있냐고 물을 수도 있는데, 이 객체도 같은 목적을 달성할 수 있지만, 이 객체는 다른 스레드 데이터와도 상호작용할 수 있어서 스레드 내에서 고유하다는 개념에 반합니다.

옵션 2

이 시나리오는 웹 HTTP 요청을 기반으로 하며, 모든 요청이 새로운 스레드이고 코드는 다음과 같습니다:



.NET 코어에서 "CallContext" 사용

CallContext는 더 이상 사용할 수 없다는 것을 알고 있습니다. NETStandard 또는 .NET Core를 사용하세요.

하지만 Asynclocal을 사용<T>해 CallContext를 모방할 수 있습니다. 다음 정적 클래스를 생성하면 됩니다:



참조가 필요한 네임스페이스:



또한 사용하기 쉽습니다(여기서는 Common 라이브러리에 CallContext를 넣었습니다):





이전의:ASP.NET MVC5는 사전 컴파일 모드를 사용하여 페이지 로드 속도와 성능을 향상시킵니다
다음:[돌기]. NET은 PPT를 그림으로 내보냅니다
게시됨 2020. 8. 25. 오후 11:38:22 |
인퓨전 향이 나지 않나요?
 집주인| 게시됨 2020. 8. 26. 오후 9:37:39 |
Cucumber 게시글 2020-8-25 23:38
인퓨전 향이 나지 않나요?

asp.net 코어의 기본 주입 수명 주기가 제 요구를 충족하지 못합니다

싱글턴: IServiceProvider 객체가 생성한 서비스 인스턴스는 IServiceProvider 객체에 루트 컨테이너로 저장되므로, 동일한 유형의 서비스 인스턴스에 대해 동일한 루트를 가진 여러 IServiceProvider 객체가 모두 동일한 객체에 있습니다.
Scoped:IServiceProvider 객체가 생성한 서비스 인스턴스는 스스로도 저장되므로, 동일한 IServiceProvider 객체에서 제공하는 동일한 유형의 서비스 인스턴스는 모두 동일한 객체입니다.
일시적: 각 서비스 제공 요청마다 IServiceProvider 객체는 항상 새로운 서비스 인스턴스를 생성합니다.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com