2011-12-02 62 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,它有一个错误修复,防止它永远不会删除结构),这就避免了这个问题