Убедитесь, что NHibernate SessionFactory создается только один раз

Я написал класс NHibernateSessionFactory, который содержит статический Nhibernate ISessionFactory. Это используется, чтобы убедиться, что у нас есть только одна фабрика сессий, и при первом вызове OpenSession () я создаю actall SessionFactory - в следующий раз я использую то же самое и открываю на нем сессию. Код выглядит так:

public class NhibernateSessionFactory : INhibernateSessionFactory
{
    private static ISessionFactory _sessionFactory;

    public ISession OpenSession()
    {
        if (_sessionFactory == null)
        {
            var cfg = Fluently.Configure().
                Database(SQLiteConfiguration.Standard.ShowSql().UsingFile("Foo.db")).
                Mappings(m => m.FluentMappings.AddFromAssemblyOf<MappingsPersistenceModel>());
            _sessionFactory = cfg.BuildSessionFactory();
            BuildSchema(cfg);
        }
        return _sessionFactory.OpenSession();
    }

    private static void BuildSchema(FluentConfiguration configuration)
    {
        var sessionSource = new SessionSource(configuration);
        var session = sessionSource.CreateSession();
        sessionSource.BuildSchema(session);            
    }
}

Теперь у меня проблема. Мое приложение разделено между клиентом и сервером. Материал Nhibernate находится на стороне сервера. При запуске и мой клиент, и сервер хотят получить доступ к базе данных через некоторые сервисы, которые будут использовать NhibernateSessionFactory. Результатом является условие состязания с тем, создается ли _sessionFactory до того, как запрос поступит от клиента. Если это не так, это не удастся ..

Я предполагаю, что мне нужен механизм очередей или ожидания в NhibernateSessionFactory, но я не уверен, что делать. У кого-нибудь была такая же проблема раньше? Какое лучшее решение?

Ответы на вопрос(2)

Ваш ответ на вопрос