Я написал класс 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, но я не уверен, что делать. У кого-нибудь была такая же проблема раньше? Какое лучшее решение?