【发布时间】:2011-08-30 16:52:19
【问题描述】:
我正在学习db4o数据库,打算用3层项目。
我不完全理解 db4o 中对象标识的概念。
假设我们有这样一个类:
public class User
{
public Guid Id;
public String SomeString;
public Int64 SomeInt;
public DateTime SomeDate;
public DateTimeOffset SomeDateOffset;
public TimeSpan SomeTimeSpan;
public User SomeUser;
}
我从数据库中加载了 User 类型的对象,并将其所有成员更改为新实例。 Db4o 将如何确定如何处理成员、何时更新(替换)以及何时存储它们的新实例?
根据手册和身份概念,我的根对象引用保持不变,因此根对象是更新的,所有成员对象都有一个新引用,因此它会插入它们的新实例,但在这种情况下,我们有空间泄漏,旧的String、DateTime、TimeSpan、User 等类型的实例保留在 DB 中。
我们可以假设它删除了被孤立的对象(没有被任何人引用),但是根用户对象没有被任何人引用呢,如果我存储了纯 DateTime 对象或 Int32 对象呢?它会标记这种明确存储的对象,使其免于“垃圾收集”吗?这只是我的假设,有人可以解释一下这实际上是如何工作的吗?
【问题讨论】: