db40不删除该记录

本文关键字:记录 删除 db40 | 更新日期: 2023-09-27 18:16:22

大家好!尝试db40,面对这个问题:我不能删除记录:

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<数据库中的DateTime,>)未被更改

db40不删除该记录

这行不通!原因是KeyValuePair是一个值类型,这意味着它没有标识。然而,db40通过对象的标识来管理对象!现在c#很乐意将任何值类型打包到一个对象中,但这对db40来说毫无用处,因为它不会在数据库中找到具有给定标识的任何对象。

您在。net和db40行为之间遇到了令人讨厌的角落情况。基本上没有很好的方法可以解决这个问题,特别是因为db40没有通过其内部id =(.

删除对象的API。

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