Я использую NHibernate с WebSessionContext. У меня есть 2 вопроса:
1) Как выполнить модульное тестирование кода уровня данных, поскольку модульные тесты не являются веб-приложениями, поэтому нет HttpSession
, который может использовать NHibernate. (Я думаю, что параметризация типа SessionContext
и использование различных SessionContext
s для тестирования и тестирования - плохая идея, поскольку это приведет к тому, что не будет проверяться реальное поведение в реальной среде).
2) Должен ли я вручную удалять любой сеанс, полученный от GetCurrentSession()
, или я могу оставить его, и когда будет удален HttpContext, сеанс будет также удален?
Моя фабрика запросов выглядит так:
public class HibernateSessionFactory
{
private readonly ISessionFactory sessionFactory;
public HibernateSessionFactory(string connectionString)
{
var msSqlConfiguration = MsSqlConfiguration.MsSql2012.ConnectionString(connectionString);
// msSqlConfiguration.ShowSql().FormatSql();
this.sessionFactory = Fluently.Configure()
.Database(msSqlConfiguration)
.CurrentSessionContext<WebSessionContext>()
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<HibernateSessionFactory>())
.BuildSessionFactory();
}
public ISession GetCurrentSession()
{
if (!CurrentSessionContext.HasBind(this.sessionFactory))
{
CurrentSessionContext.Bind(this.sessionFactory.OpenSession());
}
return this.sessionFactory.GetCurrentSession();
}
public void DisposeCurrentSession()
{
var currentSession = CurrentSessionContext.Unbind(this.sessionFactory);
currentSession.Close();
currentSession.Dispose();
}
}