Handling “schema” in SQLite Unit Tests
我有一个项目,正在使用Fluent NHibernate映射SQL Server数据库,并从另一个Fluent NHibernate映射的SQL Server数据库生成数据,这是我们的来源。
我目前正在编写一些单元测试,以检查从一个数据库读取的功能并在另一个数据库中创建记录。
我已经为数据库创建了一个内存中的SQLite数据库以创建记录,并且工作正常。但是,当我尝试为我的"源"数据库创建一个类似的SQLite数据库时,会出现失败,并声称"没有这样的表"。
这似乎是因为在源数据库的Fluent NHibernate dll中,它们使用了类似" dbo.table"的名称,并且由于我的SQLite测试数据库中没有架构,因此无法创建测试表。
有没有办法处理此" dbo"。创建测试数据库时在SQLite中的名称?
1 | SELECT * from dbo.mytable |
与:
相同
1 | SELECT * from"dbo"."mytable" |
要使其正常工作,您需要附加另一个名为
1 | ATTACH DATABASE ':memory:' AS dbo |
或者,将表名用引号引起来(如果使用NHibernate可能的话),以便该点成为表名的一部分:
1 | SELECT * FROM"dbo.mytable" |
您可以将委托传递给
1 2 3 4 5 6 7 8 | schemaExport.Execute(script => { using (var cmd = session.Connection.CreateCommand()) { cmd.CommandText = script.Replace("dbo.","dbo_"); cmd.ExecuteNonQuery(); } }, false, false, exportSchemaOutput); |
(假设您已经调用了