nHibernate -> Зависимость на уровне пользовательского интерфейса - PullRequest
1 голос
/ 11 декабря 2010

Мы хотим воспользоваться функциональностью nHibernate «Единица работы».Чтобы сделать это в нашем приложении C # WinForms, нам нужно открыть сессию из уровня пользовательского интерфейса, т.е. когда форма открывается.Выполните некоторую работу, а затем закройте сеанс, когда мы закроем форму.

Этот подход, основанный на формах, кажется очень логичным, за исключением того факта, что теперь нам требуется ссылка на nHibernate из нашего уровня пользовательского интерфейса!Где мы должны ссылаться на nHibernate, я бы подумал, что мы можем сделать это без ссылки на него из нашего уровня пользовательского интерфейса?

1 Ответ

2 голосов
/ 11 декабря 2010

Вам нужен класс диспетчера сеансов, который был бы оболочкой для привязки сеанса nhibernate.Примерно так:

    public class SessionManager : ISessionManager
{
    private  readonly ISessionFactory _sessionFactory;

     SessionManager()
    {
        _sessionFactory = CreateSessionFactory();
    }

    public void OpenSession()
    {
        ISession session = _sessionFactory.OpenSession();

        session.BeginTransaction();

        CurrentSessionContext.Bind(session);
    }


    public void CloseSession()
    {
        ISession session = CurrentSessionContext.Unbind(_sessionFactory);


        if (session == null) return;


        try
        {
            session.Transaction.Commit();
        }

        catch (Exception)
        {
            session.Transaction.Rollback();
        }

        finally
        {
            session.Close();

            session.Dispose();
        }
    }
}

Просто создайте метод CreateSessionFactory.

...