db4o不会删除记录

时间:2011-12-02 12:56:36

标签: c# 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&lt; DateTime,Transfer&gt;)不会更改。

1 个答案:

答案 0 :(得分:2)

这不起作用!原因是KeyValuePair是一个值类型,这意味着它没有标识。但是db4o按其身份管理对象!现在C#很高兴地将任何值类型包装到一个对象,但这对db4o来说没用,因为它不会在数据库中找到任何具有给定标识的对象。

你在.NET和db4o行为之间遇到了烦人的角落。基本上没有很好的解决方法,特别是因为db4o没有通过其内部id =(。

删除对象的API。

为了将来。不要为自己存储KeyValuePairs(或任何结构)。仅作为另一个对象的一部分。 (并使用8.1,它有一个错误修正,防止它永远不会删除结构)。这避免了这个问题。