문제

내가 사용하여 NHibernate 프로젝트에 필요한 데이터 감사합니다.내가 발견 이 문서 에 codeproject 을 설명하는 IInterceptor 인터페이스입니다.

무엇이 선호하는 방법으로 감사의 데이터가?당신이 사용하여 데이터베이스 트리거는 무엇입니까?당신이 뭔가를 사용하는 것과 유사하게 dicussed 문서에서?

도움이 되었습니까?

해결책

에 대한 NHibernate2.0,당신은 또한 고려해야 합니다 Event Listeners.이들은 진화의 IInterceptor 인터페이스하고 우리가 사용하는 그들을 성공적으로 한 감사 합니다.

다른 팁

[편집]

게시 NH2.0 출시 이벤트에 청취자고 제안했다.내 대답이 다르다는 것을 알게 됩니다.


이 IInterceptor 는 권장하는 방법을 수정하는 데이터에 nhibernate 에서는 비침범성 패션이다.그것은 또한 유용한 암호 해독/의 암호화 없이 데이터를 응용 프로그램 코드를 필요로 알고 있습니다.

트리거에는 데이터베이스 이동의 책임은 로깅(응용 프로그램 관심)에 DBMS 층을 효과적으로 관계를 로깅 솔루션을 데이터베이스 플랫폼입니다.캡슐화하여 감사의 역학에서는 끈기층을 유지하는 플랫폼 독립 및 코드 transportability.

나는 사격에서 생산하는 코드를 제공합 감사를 몇 대형 시스템입니다.

선 CodeProject 접근법 당신이 언급했다.

하나의 문제는 데이터베이스 트리거는 당신은 선택의 여지가 없지만 사용하여 통합 보안과 함께 active directory 으로 접근하여 귀하의 SQL 서버입니다.그 이유는 그의 연결 상속받은 사용자의 id 를 누가 트리거 연결;응용 프로그램에서 사용하는 경우 이름이"sa"계정 또는 다른 사용자 계정,"사용자"란에만 반영"sa".

이것으로 덮어쓸 수 있습을 만드는 이름의 SQL 서버 계정에 대한 각각의 사용자가 응용 프로그램이지만,이 것이 비현실적에 대한 비 인트라넷을 공개 웹 응용 프로그램에 대한 예입니다.

저 Interceptor 접근 방식을 언급,그리고 사용하여 이 프로젝트에서 나는 현재에 노력하고 있습니다.

그러나,하나는 명백하는 단점을 가치가있을 강조하는 이 방법을 것이 감사할뿐만 아니라 데이터 변경사항을 통해 응용 프로그램입니다.어떤 직접적인 데이터 수정 등 ad-hoc SQL 스크립트가 필요할 수 있는 실행할 시간을 시간에서(항상 발생!) 지 않을 것이 감사할지 않는 한,당신은 기억을 수행하는 감사는 테이블 삽입에서 동일한 시간입니다.

이전 질문입니다.하지만 나는 다음과 같이 대답하기에서 빛의 새로운 이벤트 시스템에서 NH2.0.이벤트 청취자에 대한 더 나은 감사와 같은 보다는 기능이터.Ayende 썼는 좋은 예를 들어 자신의 블로그에습니다.여기에 URL 을하는 그의 블로그에 포스트

ayende.com/Blog/archive/2009/04/29/nhibernate-ipreupdateeventlistener-amp-ipreinserteventlistener.aspx

으로는 완전히 다른 방식을 사용할 수 있습니 패턴이 장식으로 저장소가 여기에 해당합니다.

public interface IRepository<EntityType> where EntityType:IAuditably
{ 
    public void Save(EntityType entity);
}

그런 다음,우리는 우리의 NHibernateRepository:

public class NHibernateRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       session.SaveOrUpdate(entity);
   }
}

그렇다면 우리가 할 수 있는 감사는 저장소:

public class AuditingRepository<EntityType>:IRepository<EntityType>
{
   /*...*/
   public void Save ( EntityType entity )
   {
       entity.LastUser = security.CurrentUser;
       entity.LastUpdate = DateTime.UtcNow;
       innerRepository.Save(entity)
   }
}

그런 다음 사용하 IoC Framework(StructureMap,성 윈저,NInject)작성할 수 있는 모든지 않고 나머지 부분의 코드가 모든 알면 당신이 감사를 진행.

물론,당신은 어떻게 감사의 요소 계단식 컬렉션은 또 다른 문제는 전적으로...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top