2012-10-24 65 views
1

我們在我們的項目中使用Db4o。Db4o數據庫自動測試

我有一些自動測試,其中測試對象的持久性。 問題是,我無法打開/創建數據庫兩次。 我有兩個輔助方法來創建對象容器。但是當第二次調用該方法時,「ArgumentException:已經使用配置」。被拋出。我關閉並放棄了前一個對象的容器。

我做錯了什麼?

CODE:

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; 
} 

回答

1

您正在使用過時的db4o方法。問題是Db4oFactory.Configure()返回一個靜態配置對象;這種方法僅用於向後兼容。

如果您使用的是較新的db4o版本,請改爲使用Db4oEmbedded.NewConfiguration()。否則(如果您確實需要堅持使用較舊的db4o版本),則應該使用Db4oFactory.NewConfiguration()。

+0

謝謝!我必須看到古老的例子。 – TcKs