1

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

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

这似乎是因为在源数据库的 Fluent NHibernate dll 中,他们给出了类似“dbo.table”的名称,并且由于我的 SQLite 测试数据库中没有架构,因此无法创建测试表。

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

4

2 回答 2

1
SELECT * from dbo.mytable

是相同的:

SELECT * from "dbo"."mytable"

要完成这项工作,您需要附加另一个名为 的数据库dbo,如下所示:

ATTACH DATABASE ':memory:' AS dbo

或者,将表名用引号括起来(如果 NHibernate 可以的话),这样该点就是表名的一部分:

SELECT * FROM "dbo.mytable"
于 2012-09-24T15:12:51.613 回答
0

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

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

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

于 2015-09-21T01:17:09.400 回答