处理"架构"在SQLite单元测试中

时间:2012-09-24 13:39:07

标签: sqlite unit-testing fluent-nhibernate

我有一个项目,我使用Fluent NHibernate映射SQL Server数据库,并从另一个Fluent NHibernate映射的SQL Server数据库生成数据,这是我们的来源。

我目前正在编写一些单元测试,用于检查从一个数据库读取的函数并在另一个数据库中创建记录。 我已经为我的数据库创建了一个用于创建记录的内存中SQLite数据库,它工作正常。但是当我尝试为我的“源”数据库创建一个类似的SQLite数据库时,我得到的失败声称“没有这样的表”。

这似乎是因为在源数据库的Fluent NHibernate dll中,他们给出了像“dbo.table”这样的名称,因为我的SQLite测试数据库中没有模式,所以无法创建测试表。

有没有办法处理这个“dbo”。创建测试数据库时SQLite中的名称?

2 个答案:

答案 0 :(得分:1)

SELECT * from dbo.mytable

与:

相同
SELECT * from "dbo"."mytable"

要实现这一目标,您需要attach另一个名为dbo的数据库,如下所示:

ATTACH DATABASE ':memory:' AS dbo

或者,将表名包装在引号中(如果可以使用NHibernate),这样该点就是表名的一部分:

SELECT * FROM "dbo.mytable"

答案 1 :(得分:0)

您可以将委托传递给SchemaExport.Execute来修改脚本调用。将execute参数设置为false,您可以修改脚本行并自己调用它们:

schemaExport.Execute(script => { using (var cmd = session.Connection.CreateCommand()) { cmd.CommandText = script.Replace("dbo.", "dbo_"); cmd.ExecuteNonQuery(); } }, false, false, exportSchemaOutput);

(我假设您已经调用了ISession个对象)。