我有一个项目,我使用Fluent NHibernate映射SQL Server数据库,并从另一个Fluent NHibernate映射的SQL Server数据库生成数据,这是我们的来源。
我目前正在编写一些单元测试,用于检查从一个数据库读取的函数并在另一个数据库中创建记录。 我已经为我的数据库创建了一个用于创建记录的内存中SQLite数据库,它工作正常。但是当我尝试为我的“源”数据库创建一个类似的SQLite数据库时,我得到的失败声称“没有这样的表”。
这似乎是因为在源数据库的Fluent NHibernate dll中,他们给出了像“dbo.table”这样的名称,因为我的SQLite测试数据库中没有模式,所以无法创建测试表。
有没有办法处理这个“dbo”。创建测试数据库时SQLite中的名称?
答案 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
个对象)。