4

単体テストでServiceStackORMliteを使用してメモリデータベースとしてSqliteを使用しようとしています。

SQLiteを使用してテストを実行すると、ファイルに保存されます。接続文字列を使用する

"Data Source=|DataDirectory|unittest.db;Version=3;"

、正常に動作し、認証テーブルはServiceStacksによって正常に生成されます

userRepository.CreateMissingTables(); 

ただし、この接続文字列を使用してSQLiteをメモリデータベースとして使用しようとすると

":memory:"

と言うと例外が発生します

SQLite error
no such table: UserAuth

これを実行して初めてユーザーを取得しようとしたとき

userRepository.GetUserAuthByUserName(...)

これは、userRepository.CreateMissingTables()を呼び出した後のことであり、ファイルデータベースでSQLiteを使用するように切り替えると正常に機能します。誰かが問題が何であるか知っていますか?(Ormlite3.9.4のORMliteのバージョン1.0.65.0への参照が不適切なため、ORMLiteのバージョン3.9.0にダウングレードする必要がありました)

4

1 に答える 1

5

ServiceStack v5

AutoDisposeConnectionServiceStackの最近のバージョンでは、SQLite接続が自動的に無効になるため、通常どおりに:memory:構成できます。例:OrmLiteConnectionFactory

var dbFactory = new OrmLiteConnectionFactory(":memory:", SqliteDialect.Provider);

var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();

ServiceStack v3

メモリデータベース内のSqliteのDB接続を閉じると、データベースが失われます。

したがって、DB Factoryを構成するときは、接続を破棄しないように指示する必要があります。これは、autoDisposeConnectionコンストラクターパラメーターを使用して実行できます。例:

var dbFactory = new OrmLiteConnectionFactory(":memory:", 
    autoDisposeConnection:false, 
    dialectProvider:SqliteDialect.Provider);

var sqliteRepo = new OrmLiteAuthRepository(dbFactory);
sqliteRepo.CreateMissingTables();
于 2012-08-14T17:11:33.553 に答える