ASP .NET MVC 애플리케이션에서 NHibernate 이벤트 리스너로 데이터 전달

가브리엘 안드레이

orm (IPostUpdateEventListener, IPostInsertEventListener, IPostDeleteEventListener)에 감사 기능을 추가했습니다. 잘 작동합니다. 문제는 데이터베이스에 대한 요청이 다른 추가 정보와 함께 수행 된 사용자 이름과 IP 주소를 기록하고 싶다는 것입니다.

웹, ORM 및 공유의 3 개 모듈이 있습니다. 웹-> 공유 <-ORM. 웹은 Shared에있는 인터페이스를 통해 ORM에 액세스합니다. 요청에 대한 정보를 더 추가하려면 어떻게해야합니까? (또는 정확히 nhibernate 세션) 그래서 이벤트 리스너 코드에서 호출 할 수 있습니다.

감사 :)

Fran

여기 내 청취자의 예가 있습니다. NHibernate Cookbook에 배치 된 것과 거의 동일합니다. HttpContext 또는 WindowsIdentity에서 사용자 이름을 가져 오는 메서드가 있습니다. 웹에서 항상 호출 할 것이라는 것을 알고 있다면 항상 HttpContext.Current를 정의해야합니다. 거기에서 원하는 정보를 얻으십시오. 그 요청에 대한 액세스 권한을 제공해야합니다.

public class EventListener : IPreInsertEventListener, IPreUpdateEventListener
{
    private readonly IStamper _stamper;

    public EventListener() : this(new Stamper()) { }

    public EventListener(IStamper stamper)
    {
        _stamper = stamper;
    }

    #region IPreInsertEventListener Members

    public bool OnPreInsert(PreInsertEvent @event)
    {
        _stamper.Insert(@event.Entity as IStampedEntity, @event.State, @event.Persister);
        return false;
    }

    #endregion

    #region IPreUpdateEventListener Members

    public bool OnPreUpdate(PreUpdateEvent @event)
    {
        _stamper.Update(@event.Entity as IStampedEntity, @event.OldState, @event.State, @event.Persister);
        return false;
    }

    #endregion
}

public interface IStamper
{
    void Insert(IStampedEntity entity, object[] state, IEntityPersister persister);
    void Update(IStampedEntity entity, object[] oldState,  object[] state, IEntityPersister persister);
}

public class Stamper : IStamper
{
    private const String CreateUser = "CreateUser";
    private const String CreateDate = "CreateDate";
    private const String LastUpdateUser = "LastUpdateUser";
    private const String LastUpdateDate = "LastUpdateDate";

    public void Insert(IStampedEntity entity, object[] state, IEntityPersister persister)
    {
        if (entity == null)
            return;

        SetCreate(entity, state, persister);
        SetChange(entity, state, persister);
    }

    public void Update(IStampedEntity entity, object[] oldState, object[] state, IEntityPersister persister)
    {
        if (entity == null)
            return;

        SetChange(entity, state, persister);
    }

    private void SetCreate(IStampedEntity entity, object[] state, IEntityPersister persister)
    {
        entity.CreateUser = GetUserName();
        SetState(persister, state, CreateUser, entity.CreateUser);
        entity.CreateDate = DateTime.UtcNow;
        SetState(persister, state, CreateDate, entity.CreateDate);            
    }

    private void SetChange(IStampedEntity entity, object[] state, IEntityPersister persister)
    {
        entity.LastUpdateUser = GetUserName();
        SetState(persister, state, LastUpdateUser, entity.LastUpdateUser);
        entity.LastUpdateDate = DateTime.UtcNow;
        SetState(persister, state, LastUpdateDate, entity.LastUpdateDate);
    }

    private void SetState(IEntityPersister persister, IList<object> state, String propertyName, object value)
    {
        var index = GetIndex(persister, propertyName);
        if (index == -1)
            return;
        state[index] = value;
    }

    private Int32 GetIndex(IEntityPersister persister, String propertyName)
    {
        return Array.IndexOf(persister.PropertyNames, propertyName);
    }

    private String GetUserName()
    {
        if (HttpContext.Current != null)
            return HttpContext.Current.User.Identity.Name;

        var windowsIdentity = WindowsIdentity.GetCurrent();
        return windowsIdentity != null ? windowsIdentity.Name : String.Empty;
    }
}

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

ASP.NET Core mvc 애플리케이션에서 FFMPEG 기록

분류에서Dev

버튼 클릭시 asp .net MVC 웹 애플리케이션에서 IOS 애플리케이션 열기

분류에서Dev

클래식 asp.net 애플리케이션에서 mvc 애플리케이션 열기

분류에서Dev

Azure Function에서 ASP.NET Core MVC 애플리케이션 호스팅

분류에서Dev

ASP.NET MVC의 CreateCriteria 및 이전 NHibernate

분류에서Dev

.net 핵심 웹 API에서 typescript 애플리케이션으로 바이너리 데이터 전송

분류에서Dev

ASP.NET MVC 4.6 애플리케이션에서 ASP.NET Core Web API로 파일 게시

분류에서Dev

자바 스크립트에서 ASP.NET MVC 애플리케이션의 URL 호출

분류에서Dev

자바 스크립트에서 ASP.NET MVC 애플리케이션의 URL 호출

분류에서Dev

asp.net 웹 애플리케이션에서 정적 사전 사용

분류에서Dev

angular js 및 asp.net mvc 4 샘플 애플리케이션

분류에서Dev

Asp.Net MVC 애플리케이션 설계

분류에서Dev

Asp.net MVC 실시간 애플리케이션 성능

분류에서Dev

ASP.NET MVC 애플리케이션 개발을위한 PhoneGap

분류에서Dev

ASP.NET MVC : 작업 필터에서보기로 데이터 전달

분류에서Dev

Sitecore 사용자에 대한 ASP.NET MVC 애플리케이션 인증

분류에서Dev

asp.net에서 콘솔 애플리케이션 호출

분류에서Dev

Azure에서 ASP.NET 애플리케이션 인증

분류에서Dev

Asp.Net MVC 애플리케이션에서 EmguCV를 사용하는 방법 자습서

분류에서Dev

Asp.Net Core MVC 웹 애플리케이션의 단위 테스트

분류에서Dev

Asp.Net MVC 애플리케이션 2 부에서 모델에 값 바인딩

분류에서Dev

MVC5에서 Asp.net 웹 애플리케이션에 연결하는 Apache Cordova

분류에서Dev

Android 애플리케이션에서 서버로 데이터 전달

분류에서Dev

asp.net MVC 웹 애플리케이션에서 ES6 javascript 파일 번들링 및 축소

분류에서Dev

RedHat OS에서 asp.net MVC4 웹 애플리케이션을 실행하는 방법

분류에서Dev

ASP.NET 웹 애플리케이션에서 UWP 애플리케이션 실행

분류에서Dev

ASP.NET WebAPI ApiController에서 ASP.NET MVC 컨트롤러로 데이터를 어떻게 전달합니까?

분류에서Dev

ASP.NET MVC : View에서 Controller로 복잡한 데이터 전달

분류에서Dev

ASP.NET MVC의 View에서 Controller로 HTML 양식 데이터 전달

Related 관련 기사

  1. 1

    ASP.NET Core mvc 애플리케이션에서 FFMPEG 기록

  2. 2

    버튼 클릭시 asp .net MVC 웹 애플리케이션에서 IOS 애플리케이션 열기

  3. 3

    클래식 asp.net 애플리케이션에서 mvc 애플리케이션 열기

  4. 4

    Azure Function에서 ASP.NET Core MVC 애플리케이션 호스팅

  5. 5

    ASP.NET MVC의 CreateCriteria 및 이전 NHibernate

  6. 6

    .net 핵심 웹 API에서 typescript 애플리케이션으로 바이너리 데이터 전송

  7. 7

    ASP.NET MVC 4.6 애플리케이션에서 ASP.NET Core Web API로 파일 게시

  8. 8

    자바 스크립트에서 ASP.NET MVC 애플리케이션의 URL 호출

  9. 9

    자바 스크립트에서 ASP.NET MVC 애플리케이션의 URL 호출

  10. 10

    asp.net 웹 애플리케이션에서 정적 사전 사용

  11. 11

    angular js 및 asp.net mvc 4 샘플 애플리케이션

  12. 12

    Asp.Net MVC 애플리케이션 설계

  13. 13

    Asp.net MVC 실시간 애플리케이션 성능

  14. 14

    ASP.NET MVC 애플리케이션 개발을위한 PhoneGap

  15. 15

    ASP.NET MVC : 작업 필터에서보기로 데이터 전달

  16. 16

    Sitecore 사용자에 대한 ASP.NET MVC 애플리케이션 인증

  17. 17

    asp.net에서 콘솔 애플리케이션 호출

  18. 18

    Azure에서 ASP.NET 애플리케이션 인증

  19. 19

    Asp.Net MVC 애플리케이션에서 EmguCV를 사용하는 방법 자습서

  20. 20

    Asp.Net Core MVC 웹 애플리케이션의 단위 테스트

  21. 21

    Asp.Net MVC 애플리케이션 2 부에서 모델에 값 바인딩

  22. 22

    MVC5에서 Asp.net 웹 애플리케이션에 연결하는 Apache Cordova

  23. 23

    Android 애플리케이션에서 서버로 데이터 전달

  24. 24

    asp.net MVC 웹 애플리케이션에서 ES6 javascript 파일 번들링 및 축소

  25. 25

    RedHat OS에서 asp.net MVC4 웹 애플리케이션을 실행하는 방법

  26. 26

    ASP.NET 웹 애플리케이션에서 UWP 애플리케이션 실행

  27. 27

    ASP.NET WebAPI ApiController에서 ASP.NET MVC 컨트롤러로 데이터를 어떻게 전달합니까?

  28. 28

    ASP.NET MVC : View에서 Controller로 복잡한 데이터 전달

  29. 29

    ASP.NET MVC의 View에서 Controller로 HTML 양식 데이터 전달

뜨겁다태그

보관