У меня проблема в том, что я переключил свое (работающее) решение nhibernate с несколькими базами данных на DI его фабрику сессий, чтобы я мог использовать SqlLite из своего набора интеграционных тестов.
Принимая во внимание использование физического файлагде я могу использовать несколько имен файлов, по одному для каждой базы данных (см. код ниже), я не уверен, как это сделать с ним в памяти.Может быть, это просто ограничение, накладываемое sqlite в памяти?В результате каждый последующий вызов InMemory () перезаписывает существующий, даже если каждая фабрика получает свой собственный ключ в текущем потоке.
public override Configuration BuildSessionFactoryFor(string databaseName, bool showSql, IsolationLevel level)
{
Configuration cfg = null;
var filename = @"c:\temp\{0}-test.db".Substitute(databaseName);
if (File.Exists(filename)) File.Delete(filename);
var sqlConfig =
SQLiteConfiguration.Standard.ShowSql().UsingFile(filename); //.InMemory()
var sessionFactory = Fluently.Configure()
.Database(sqlConfig)
.ProxyFactoryFactory(typeof (ProxyFactoryFactory))
.Mappings(m =>
m.AutoMappings.Add(
new AutoPersistenceModelGenerator().GenerateSchema(databaseName)
)
)
.ExposeConfiguration(c =>
{
new SchemaExport(c).Execute(false, true, false);
cfg = c;
})
.BuildSessionFactory();
NHibernateSession.AddConfiguration(FactoryKeyFor(databaseName), sessionFactory, cfg, null);
return cfg;
}