Verifique se o NHibernate SessionFactory é criado apenas uma vez

Eu escrevi uma classe NHibernateSessionFactory que contém um Nhibernate ISessionFactory estático. Isso é usado para garantir que tenhamos apenas uma fábrica de sessões e, na primeira vez em que OpenSession () for chamada, eu crio o SessionFactory atual - nas próximas vezes eu uso o mesmo e abro uma sessão nele. O código fica assim:

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);            
    }
}

Agora eu tenho um problema. Meu aplicativo é dividido entre cliente e servidor. O material Nhibernate está no lado do servidor. Na inicialização, meu cliente e servidor desejam acessar o banco de dados através de alguns serviços que usarão o NhibernateSessionFactory. Resultado é uma condição de corrida para determinar se o _sessionFactory é criado antes da solicitação do cliente. Se não for, irá falhar ..

Acho que preciso de algum tipo de mecanismo de espera ou fila no NhibernateSessionFactory, mas não tenho certeza sobre o que fazer. Alguém já teve o mesmo problema antes? Qual a melhor solução?

questionAnswers(2)

yourAnswerToTheQuestion