C# db4o:严重问题和不一致

C# db4o:严重问题和不一致,c#,java,.net,database,db4o,C#,Java,.net,Database,Db4o,我正试图通过调优我的db4o实例来弄清楚会发生什么,但这真的让我发疯:我根本不理解这一点 本质上,我创建了两个对象,并将第一个对象存储在第二个对象的ArrayList中。然后我想从整个数据库和我最初存储的列表中删除第一个对象 下面是我正在运行的操作的基本列表 User user = new User("user"); Device device = new Device("device"); objectContainer.ext().store(user,5); // object stori

我正试图通过调优我的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包含一个空对象,而如果我不关闭容器(作为正常运行的应用程序通常应避免),则设备对象仍在用户对象内,而不在整个数据库中


我只想从列表和数据库中删除对象,而不需要任何空对象。这可能吗??我尝试了很多次调整配置(weakReferences、activation、constraints等),但都没有成功。

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

  • 如果删除对象,则该对象将在数据库中删除
  • 但是,db4o不会修改任何内存内容。因此,在重新打开之前,集合是该集合的“旧”内存表示形式。它仍然包含对对象的引用。db4o不会删除它
  • 重新打开后:从数据库加载集合。由于对象已从数据库中删除,它将对不再存在的对象使用“null”引用
db4o不会从内存对象中“神奇地”为您“删除”对象。您必须确保对象模型具有一致的状态,就像任何其他内存对象图一样\


这里有一些提示:

显然它也没有从数据库中删除,本例显示了它;只有当无法从缓存中的任何其他对象访问该对象时,才会真正删除该对象。因此,您必须从使用对象的每个点删除该对象,才能真正删除它。我已重新创建了DBManager,因此现在可以手动维护关系。我认为由于缓存的原因,不可能避免这样做。即使尝试直接读取数据库,也不可能,因为对象保存在java堆中,并在重新启动时立即删除。