엔티티 프레임 워크 4.1 및 mvc3을 사용하여 사이트를 구축 중입니다. 일반 저장소 패턴을 사용하고 있습니다 :
http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle. 콘트리트 리포지토리를 컨트롤러에 주입하려면 ninject
을 사용합니다. 제 문제는 각각의 dbcontext가 다르고 "동일한 쿼리에서 다른 컨텍스트를 사용할 수 없습니다"와 같은 코드를 외치는 복잡한 쿼리를 실행할 수 없다는 것입니다. 나는 "싱글 톤"접근법을 사용해 보았지만 코드는 "처형 된 객체 (null 참조 예외)를 입력하려고했습니다"와 같은 어떤 것을 소리 쳤습니다. 누구나 내가 뭘 잘못하고 있는지 아이디어가 있습니까?일반 저장소 패턴으로 연결 관리
답변
는 싱글 톤 패턴이 반이 당신의 Global.asax에서 설치 (눈물 다운의 종료 요청)입니다 수있는 시작의 요청에 따라 최적의 작업 단위를 시작하는 장소를 찾을 피할 수있는 패턴. 모든 종류의 부작용 (예 : 삭제 된 DbContext)을 사용하여 코드를 테스트하기가 어렵습니다.
UnitOfWork는 다른 리포지토리에서 작업을 관리합니다. 그것은 모든 변경 사항을 추적하고 올바른 순서로 변경 사항을 데이터베이스에 기록합니다. DbContext는 이미 UnitOfWork 패턴을 구현합니다 (사용자 정의 UnitOfWork 인터페이스 뒤에 DbContext를 숨기는 것이 더 좋음).
의존성 주입 물마루 NInject를 이미 사용하고 있다면 거의 완벽합니다! 당신은 DbContext을 위해 저장소의 생성자를 변경해야합니다 :
public class MyRepository
{
private _unitOfWork;
public MyRepository(DbContext unitOfWork)
{
_unitOfWork = unitOfWork;
}
....
}
당신이 다음 작업을해야 InRequestScope mode 모든 것을 Ninject에에 DbContext를 연결하는 경우. 그러면 DbContext가 모든 저장소에서 공유되며 Ninject는 요청이 끝나면이를 처리합니다.
궁금한 점이 있는지는 잘 모르겠지만 리포지토리는 하나의 dbcontext가있는 "작업 단위 (UOW)"에서 작업 할 수 있어야합니다.
난 당신이"작업 단위"는 아직 시도하지 않은 것입니다. 왜 "단일 톤"패턴을 사용할 때 null 참조를 얻었는지 말해 줄 수 있습니까? (처분 된 객체에 액세스하려고 시도합니다) –
- 1. 일반 저장소
- 2. 패턴으로 결과 찾기 및 연결
- 3. 데이터베이스 특정 ID를 저장소 패턴으로 추출 하시겠습니까?
- 4. 일반 저장소 디자인
- 5. ScalaQuery를 사용하는 일반 저장소
- 6. 일반 저장소 및 트랜잭션
- 7. NerdDinner 일반 저장소 인터페이스?
- 8. 일반 저장소. findById 메소드
- 9. 일반 저장소 생성자
- 10. 어떻게 데이터 저장소 관리
- 11. Maven을위한 최고의 저장소 관리
- 12. 저장소 연결 풀링
- 13. 소프트 삭제 기능이있는 일반 저장소
- 14. 일반 Oracle 데이터 수집 저장소
- 15. 엔티티 프레임 워크 일반 저장소
- 16. Entity Framework 4.1 일반 저장소
- 17. 일반 텍스트 대 데이터베이스 저장소
- 18. MVC3 EF Ninject 일반 저장소
- 19. Eclipse에서 로컬 SVN 저장소 관리
- 20. 작곡가의 개인용 저장소 버전 관리
- 21. 사용자 데이터의 버전 관리 저장소
- 22. Outlook MAPI 저장소 공급자. 관리?
- 23. MonoDevelop에 버전 관리 저장소 추가
- 24. SVN 저장소 설정 파일 관리
- 25. EF + 저장소 패턴으로 asp.net 동적 데이터를 사용할 수 있습니까
- 26. 왜 EF 저장소 패턴으로 POCO의 기본 클래스를 사용합니까?
- 27. 일반 두꺼비 연결 질문
- 28. 원격 WMI 연결 관리
- 29. Android에서 SQLite 연결 관리
- 30. IIS7에서 동시 연결 관리
내 저장소의 생성자가 dbContext를 가져와야하고 ninject가 dbcontext를 자동으로 삽입한다는 것을 알 수 있습니까? 컨트롤러에서 호출 될 때 저장소 클래스? –
더하기,이 기사에서 볼 수있는 Generic Repository를 사용하고 있습니다 : http://www.tugberkugurlu.com/archive/generic-repository-pattern-entity-framework-asp-net-mvc-and-unit-testing-triangle 저장소 생성자를 사용할 수 있습니까? –
예. 리포지토리의 생성자가 dbContext를 받아 들여야 함을 의미합니다. 그런 다음 NInject를 사용하여 InRequestScope (각 요청에 대해 하나의 공유 dbContext가 있음을 의미)가있는 dbContext를 삽입하면 작동합니다. 지금까지 볼 수 있듯이 GenericRepository는 각 저장소마다 하나씩 생성하는 대신 생성자에서 dbContext를 사용하도록 수정해야합니다. –