2011-12-02 100 views
0

美好的一天!嘗試db4o的,面對這樣的問題:我不能刪除記錄:db4o不刪除記錄

using (IObjectServer server = Db4oClientServer.OpenServer(HttpContext.Current.Server.MapPath("~/transfers.data"), 0)) 
      { 
       using (IObjectContainer client = server.OpenClient()) 
       { 
        var keyValuePair = (from KeyValuePair<DateTime, Transfer> d in client where d.Key < DateTime.Now.AddHours(-3) select d); 
        client.Delete(keyValuePair.First()); 
        client.Commit();  
       } 
      } 

此代碼後對象的數量(KeyValuePair <日期時間,轉移>)在數據庫中沒有改變。

回答

2

這不行!原因是KeyValuePair是一個值類型,這意味着它沒有身份。但是db4o通過他們的身份來管理對象!現在C#愉快地將任何值類型放入對象中,但對於db4o來說這樣做毫無用處,因爲它無法在數據庫中找到具有給定標識的任何對象。

您遇到了.NET和db4o行爲之間惱人的角落案例。基本上沒有很好的解決方法,特別是因爲db4o沒有API來刪除一個對象的內部id =(。

未來。不要爲自己存儲KeyValuePairs(或任何結構體) 。只有作爲另一個對象的一部分(並使用8.1,它有一個錯誤修復,防止它永遠不會刪除結構),這就避免了這個問題