«Постоянный» SessionFactory, ASP.NET MVC и nHibernate - PullRequest
3 голосов
/ 02 декабря 2010

Я создавал приложение с помощью Fluent nHibernate / ASP.NET MVC - и я покопался и выяснил, что считается наиболее подходящей практикой - держать «постоянный» SessionFactory открытым, а затем использовать сессии для каждого запроса в базу данных. Хорошо, это звучит хорошо ...

Я совсем не понимаю, как этого добиться. Все, что я нахожу, предполагает целую структурированную структуру, которая использует какую-то систему контейнеров IoC ... и это слишком продвинуто для того, что я имею до сих пор. Есть ли еще простые примеры того, как реализовать этот вид дизайна?

Я посмотрел на Где найти хорошее справочное приложение NHibernate и ASP.NET MVC

И даже прочитал книгу «ASP.NET MVC в действии», но ее пример гораздо сложнее, чем то, чего я пытаюсь достичь. Я думал, что одноэлементная модель будет работать в Application_Start 'global.asax', но это не дало результатов, на которые я надеялся. Это продолжало бы избавляться от моей фабрики и никогда не создавало бы ее заново.

Ответы [ 2 ]

5 голосов
/ 02 декабря 2010

Вы можете выставить ISessionFactory как синглтон:

public sealed class FactoryManager
{
    private static readonly ISessionFactory _instance = CreateSessionFactory();

    static FactoryManager()
    { }

    public static ISessionFactory Instance
    {
        get { return _instance; }
    }

    private static ISessionFactory CreateSessionFactory()
    {
        // TODO: configure fluentnhibernate and create a session factory
    }
}

Теперь вы можете использовать FactoryManager.Instance в вашем коде:

using (var session = FactoryManager.Instance.OpenSession())
using (var tx = session.BeginTransaction())
{
    // TODO: use the session here
    tx.Commit();
}
2 голосов
/ 02 декабря 2010

Создайте статический метод GetSessionFactory для вашего глобального класса MvcApplication. Этот метод инициализирует фабрику сеансов при первом вызове и сохраняет ее как частную статическую переменную. При последующих вызовах он просто возвращает статическую переменную.

Этот метод также может проверить, является ли объект нулевым или расположенным, и воссоздать его при необходимости, хотя это не должно происходить, поскольку переменная будет статической и, следовательно, останется в живых в течение всего времени жизни приложения.

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