美好的一天!试试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;)不会更改。
答案 0 :(得分:2)
这不起作用!原因是KeyValuePair是一个值类型,这意味着它没有标识。但是db4o按其身份管理对象!现在C#很高兴地将任何值类型包装到一个对象,但这对db4o来说没用,因为它不会在数据库中找到任何具有给定标识的对象。
你在.NET和db4o行为之间遇到了烦人的角落。基本上没有很好的解决方法,特别是因为db4o没有通过其内部id =(。
删除对象的API。为了将来。不要为自己存储KeyValuePairs(或任何结构)。仅作为另一个对象的一部分。 (并使用8.1,它有一个错误修正,防止它永远不会删除结构)。这避免了这个问题。