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、スクリプト呼び出しを変更できます。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 に答える