الدورة StructureMap / NHibernate لكل طلب بما في ذلك المعاملات ثابتة

StackOverflow https://stackoverflow.com/questions/1816753

سؤال

وأنا فقط بدأت باستخدام StructureMap في بلدي تطبيقات MVC، وسار كل شيء على ما يرام، تستثني التعامل مع بلدي ITranscation الطريق الصحيح.

ما أريد القيام به هو إنشاء ISession جديد على كل طلب. جنبا إلى جنب مع هذا أريد أن أبدأ من الصفقات.

في نهاية الطلب وسوف ارتكاب الصفقات.

وسؤالي هو، كيف يمكن أن أفعل هذا أفضل وسيلة StructureMap. لقد وجدت الكثير من الأمثلة على جوجل، ولكن أيا منها يبدأ الصفقات لمع الطلب، وأنا حقا لا أريد أن أفعل هذا في أساليبي.

ويرجع الفضل في ذلك مسبقا!

هل كانت مفيدة؟

نصائح أخرى

وانها على الارجح ليس من السهل ولكن قطتي هنا. إنشاء وحدة العمل التي يلتف أساسا الدورة والمعاملات والمخزن الذي بعيدا عن الطلب وارتكاب أو العودة عندما طلب هو أكثر.

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