1

私たちのプロジェクトでは Db4o を使用しています。

オブジェクトの永続性をテストする自動テストがいくつかあります。問題は、データベースを 2 回開いたり作成したりできないことです。オブジェクト コンテナーを取得するためのヘルパー メソッドが 2 つあります。しかし、メソッドが 2 回目に呼び出されると、「ArgumentException: 構成は既に使用されています。」投げられます。もちろん、以前のオブジェクトコンテナを閉じて破棄しました。

私は何を間違っていますか?

コード:

public static IObjectContainer GetEmptyTestingDatabase() {
    var tempDir = Environment.GetFolderPath(Environment.SpecialFolder.InternetCache);
    string dbFilePath = Path.Combine(tempDir, "UNIT-TESTING.db4o");
    if (File.Exists(dbFilePath)) {
        File.Delete(dbFilePath);
    }

    var cfg = Db4oFactory.Configure();
    cfg.Add(new TransparentPersistenceSupport(new DeactivatingRollbackStrategy()));
    cfg.Add(new TransparentActivationSupport());

    var db = Db4oFactory.OpenFile(cfg, dbFilePath);
    return db;
}
public static IObjectContainer GetMemoryDatabase() {
    string dbFileName = Guid.NewGuid().ToString().ToString();

    var cfg = Db4oFactory.Configure();
    cfg.Storage = new Db4objects.Db4o.IO.PagingMemoryStorage();
    cfg.Add(new TransparentPersistenceSupport(new DeactivatingRollbackStrategy()));
    cfg.Add(new TransparentActivationSupport());

    var db = Db4oFactory.OpenFile(cfg, dbFileName);
    return db;
}
4

1 に答える 1

1

非推奨の db4o メソッドを使用しています。問題は、Db4oFactory.Configure() が静的構成オブジェクトを返すことです。このメソッドは下位互換性のためにのみ存在します。

新しい db4o バージョンを使用している場合は、代わりに Db4oEmbedded.NewConfiguration() を使用してください。それ以外の場合 (本当に古い db4o バージョンに固執する必要がある場合)、 Db4oFactory.NewConfiguration() を使用しても機能するはずです。

于 2012-10-24T20:21:59.320 に答える