db4o:严重的问题和不一致

时间:2013-11-29 00:50:15

标签: c# java .net database db4o

我试图通过调整我的db4o实例来弄清楚会发生什么,但这真的让我发疯:它对我来说根本没有意义。

基本上我正在创建两个对象并将第一个存储在第二个的ArrayList中。然后我想从整个数据库和我最初存储的列表中删除第一个对象。

以下是我正在运行的操作的基本列表。

User user = new User("user");
Device device = new Device("device");
objectContainer.ext().store(user,5); // object storing depth
objectContainer.commit();

objectContainer.delete(device);

//objectContainer.close();
//objectContainer = new ...

此时如果我关闭并且我重新打开objectContainer,则用户deviceList包含一个空对象,而如果我不关闭容器(正常运行的应用程序通常应该避免),则设备对象仍在用户对象内,虽然它不在整个数据库中。

我只是希望从列表和数据库中删除对象,而不使用任何null对象。这可能吗??我已经尝试了许多调整配置(weakReferences,激活,约束......)很多但没有任何成功。

1 个答案:

答案 0 :(得分:1)

为什么重新打开后对象仍然在列表中,而不是之前?

  • 如果删除对象,则会在数据库中将其删除。
  • 但是,db4o不会修改任何内存内容。因此,在重新打开之前,该集合是该集合的内存表示中的“旧”。它仍然包含对象的引用。 db4o不会删除它。
  • 重新打开后:从数据库加载集合。由于该对象已从数据库中删除,因此它将对不再存在的对象使用“null”引用。

db4o不会从内存对象中''魔术''删除'对象。您必须确保对象模型具有一致状态,就像内存对象图中的任何其他状态一样。\

以下是一些提示:http://community.versant.com/documentation/reference/db4o-8.1/net/reference/Content/best_practises/managing_relations.htm