2011-05-04 3 views
1

다양한 ADO 기술 (예 : 일부 EF 및 경우에 따라 ADO.Net을 직접 사용)을 사용하여 상당히 큰 코드베이스를 사용했습니다. 시간 촬영, 실행 정확한 SQL 문, 결과가 반환 등PostSharp를 사용하여 ADO.Net을 가로 채기

주요 아이디어 - 어떤 ADO.Net 그래서 난 감사 정보를 시작할 수 호출 절편을 전체적으로 어떤 방법이 있는지

궁금하네요 만약 내가 이것을 할 수 있다면, 나는 기존의 코드를 변경할 필요가 없어야하고 ADO.Net 호출을 요격하거나 감쌀 수 있어야한다는 것이다 ... 가능한가?

+0

중복 질문과 같습니다. [PostSharp] (http://stackoverflow.com/questions/5885886/using-postsharp-to-intercept-ado-net), [AOP] (http://stackoverflow.com/questions/5870539/using-aop-techniques -to-intercept-ado-net), [CciSharp] (http://stackoverflow.com/questions/5885904/using-ccisharp-to-intercept-ado-net), [EF] (http://stackoverflow.com/questions/5885929/using-afterthought-to-intercept-ado-net) - ** 대신, 질문을 한 번만하고 모든면을 다룹니다. ** –

+0

@rockinthesixstring 나는 동의하지 않습니다. 이렇게하면 각 질문이보다 구체적이고 타당하며 OP가 비교 될 수 있습니다. 영업 사원은 답변 수, 질문 조회수, 투표 수 등을 마인드 쉐어의 지표로 사용할 수도 있습니다. –

답변

1

액세스 할 수있는 모든 방법 (예 : 생성 된 모델 & 컨텍스트)을 가로 채기 할 수 있습니다. 프레임 워크 BCL에서 메소드를 인터셉트해야하는 경우에는 아니오를 선택하십시오.

EF 모델에서 생성 된 SQL을 얻고 싶으면 원하는 메소드 중 하나를 OnMethodBoundaryAspect로 인터셉트하면 OnEntry 및 OnExit 메소드에서 로깅 할 수 있습니다.

액세스 할 수있는 코드 만 차단할 수 있습니다. 생성 된 EF 코드는 액세스 가능하지만 변경 사항을 작성하므로 부분 클래스 또는 어셈블리 선언을 사용하여 애스펙트를 적용해야합니다. 나는 당신이 세계적인 차단을 원하기 때문에 후자를 제안 할 것이다.

그냥 내 2 센트 : SQL 프로파일 러 또는 아키텍처 재 설계와 같은 다른 대안을보고 싶을 수도 있습니다.

+0

나는 별도의 dll에 있지만 실행중인 응용 프로그램의 일부인 도구에서 작업하고 있습니다. 따라서 나는 다른 dll에서 ADO 코드를 "가로 챌"필요가있다. –

+0

@vdh_ant 다른 dll에 대한 액세스 권한이 있고 다시 컴파일 할 수 있으면 잘됩니다. 그렇지 않으면 dll에서 코드를 호출하는 메소드를 차단할 수 있습니다. 이 경우 기존 DLL의 MSIL을 다시 쓸 수 있지만이 경우에는 불을 사용하고있는 프로젝트가 있습니다. –

1

Afterthought은 원본에서 재 컴파일하지 않고도 기존 dll을 수정하는 것을 지원하는 오픈 소스 도구로, 애스펙트 속성을 추가 할 수 있습니다. 이 작업을하려면 별도의 dll에서 수정 사항 (Afterthought의 변경 내용을 설명하는 방식)을 만들어야하며,이 DLL에는 대상 어셈블리의 형식을 식별 할 수있는 IAmendmentAttribute를 구현하는 어셈블리 수준의 특성이 있어야합니다. 방법.

logging example을보고이 기능의 작동 방식을 확인하고 궁금한 점이 있으면 알려주십시오.

Afterthought는 다른 어셈블리 (도구)에서 정적 메서드를 호출하도록 대상 어셈블리를 수정합니다. 어떤 방식 으로든 대상 어셈블리를 수정하여 호출을 가로 채려면 .NET 프로파일 링 API를 살펴볼 것을 권장합니다.

제이미 토마스 (Afterthought의 주 저자)