문제

방금 MVC 앱에서 StructureMap을 사용하기 시작했고 모든 것이 잘 진행됩니다. ITranscation 올바른 방법.

내가하고 싶은 것은 각 요청마다 새로운 issession을 만드는 것입니다. 이것과 함께 나는 혈통을 시작하고 싶습니다.

요청이 끝날 무렵에 나는 트랜스 시테이션을 커밋 할 것입니다.

내 질문은, 구조 맵으로 가장 좋은 방법을 어떻게 할 수 있습니까? Google에서 많은 예를 찾았지만 그 중 어느 것도 요청에 따라 트랜스케이션을 시작하지 않으며 실제로 내 방법 에서이 작업을 수행하고 싶지 않습니다.

미리 감사드립니다!

다른 팁

아마도 쉽지는 않지만 여기 내 테이크가 있습니다. 기본적으로 세션과 트랜잭션을 랩핑하는 작업 단위를 만들고 요청이 끝나면 요청 및 커밋 또는 롤백을 위해 저장하십시오.

public interface IUnitOfWork : IDisposable
{
    ISession Session { get; }
    void Commit();
    void Rollback();
}

그런 다음 구현은 다음과 같습니다.

public class UnitOfWork : IUnitOfWork
{
    private readonly ITransaction _tx;
    public ISessionFactory SessionFactory { get; set; }

    public UnitOfWork()
    {
        SessionFactory = ObjectFactory.GetNamedInstance<ISessionFactory>(Keys.SessionFactoryName);
        Session = SessionFactory.OpenSession();
        _tx = Session.BeginTransaction();
    }

    public UnitOfWork(ISessionFactory sessionFactory)
    {
        SessionFactory = sessionFactory;
        Session = SessionFactory.OpenSession();
        _tx = Session.BeginTransaction();
    }

    public ISession Session { get; private set; }

    public void Commit()
    {
        if (_tx.IsActive)
            _tx.Commit();
    }

    public void Rollback()
    {
        _tx.Rollback();
    }
}

Endrequest에서 작업 단위를 처분하십시오.

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