【发布时间】:2011-09-26 16:55:54
【问题描述】:
我有一个问题,我已将我的(工作的)多数据库休眠解决方案切换到 DI 其会话工厂,以便我可以在我的集成测试套件中使用 SqlLite。
虽然使用一个物理文件,我可以使用多个文件名,每个 db 一个有效(见下面的代码),但我不确定如何在内存中使用它。也许它只是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;
}
【问题讨论】:
标签: nhibernate sqlite