首页 文章

在SQLite单元测试中处理“模式”

提问于
浏览
1

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

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

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

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

2 回答

  • 1
    SELECT * from dbo.mytable
    

    是相同的:

    SELECT * from "dbo"."mytable"
    

    要做到这一点,你需要attach另一个名为 dbo 的数据库,如下所示:

    ATTACH DATABASE ':memory:' AS dbo
    

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

    SELECT * FROM "dbo.mytable"
    
  • 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 对象) .

相关问题