Свободный Нибернат - PullRequest
0 голосов
/ 28 мая 2011

Я пытаюсь использовать Fluent NHibernate с ASP.NET MVC 3, и я не могу найти учебник, который объясняет, как настроить все это с ASP.NET MVC. В основном мне интересно, куда поместить функцию построения ISession и как ее вызывать, когда она мне нужна. Я вижу так много разных реализаций, но ни одна из них не указывает, куда они помещают этот код. Так что, если кто-то может объяснить, как настроить его для работы с MVC 3 или где есть очень подробное руководство, это было бы очень полезно.

Ответы [ 2 ]

1 голос
/ 01 июня 2011

Если вы не используете внедрение зависимостей, вы можете попробовать что-то вроде этого

public class MvcApplication : System.Web.HttpApplication
{

    public static ISession CurrentSession
    {
        get { return (ISession)HttpContext.Current.Items["current.session"]; }
        set { HttpContext.Current.Items["current.session"] = value; }
    }

    private static ISessionFactory _session_factory;
    private static object _session_factory_lock = new object();

    protected static ISessionFactory CreateSessionFactory()
    {

        if (_session_factory != null) return _session_factory;

        if (ConfigurationManager.ConnectionStrings["DbConnection"] != null)
        {
            var conn = ConfigurationManager.ConnectionStrings["DbConnection"];
            SqlServerSessionFactoryBuilder fb = new SqlServerSessionFactoryBuilder(conn.ConnectionString);
            _session_factory = fb.GetSessionFactory();
            return _session_factory;
        }

        throw new Exception("Cannot build session factory, connection string is not defined.");

    }


    public MvcApplication()
    {
        _session_factory = CreateSessionFactory();

        BeginRequest += delegate
        {

            try
            {
                CurrentSession = _session_factory.OpenSession();
            }
            catch (FluentConfigurationException ex)
            {
                logger.FatalException(string.Format("Error configuring the database {0}", ex.Message), ex);

            }

        };


        EndRequest += delegate
        {
            if (CurrentSession != null)
            {
                if (CurrentSession.Transaction != null && CurrentSession.Transaction.IsActive)
                {
                    logger.Error("Rolling back uncommited transaction");
                    CurrentSession.Transaction.Rollback();
                }
                else
                {
                    CurrentSession.Flush();           
                }
                CurrentSession.Close();
            }
        };

        Error += delegate
        {
            var error = this.Server.GetLastError();
            logger.ErrorException(string.Format("Unhandled error : {0}", error.Message), error);  
        };
    }

    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        RegisterRoutes(RouteTable.Routes);


    }

}
1 голос
/ 28 мая 2011

Вы можете взглянуть на S # arp Architecture. Это довольно солидная архитектурная среда для работы с ASP.NET MVC и NHibernate. У них приличная документация, и есть несколько примеров проектов, на которые можно посмотреть.

http://www.sharparchitecture.net/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...