1

我是db4o的新手。

我有这个问题:当从DAL检索对象时,它可能会在业务层更新,然后我们失去了它的原始属性,所以在更新时如何找到数据库中的原始对象更新?

4

2 回答 2

2

您应该通过其 ID 加载对象:

objectContainer.get().ext().getByID(id);

或通过其 UUID:

objectContainer.get().ext().getByUUID(uuId);

请参阅后一个文档。有关解释,请参见此处的答案此处的文档。简而言之,uuid 仅用于长期引用。

于 2010-02-26T12:04:34.143 回答
2

您需要更精确地了解“对象”。如果您修改对象实例的属性,只需再次存储它就会执行更新:

MyClass someInstance = ObjectContainer.Query<MyClass>().FirstOrDefault();
someInstance.Name = "NewName";
someInstance.PhoneNumber = 12132434;
ObjectContainer.Store(someInstance); // This is the update call

[这只是伪代码]

因此,您不需要像使用 RDBMS 时那样将对象相互匹配。

但是,您需要确保您没有使用不同的 ObjectContainer 实例,因为不同的容器不会知道这些对象是同一个实例(因为它们中没有 ID 字段)。

您的应用程序架构应该有助于为大多数工作流程执行此操作,因此实际上应该只有一个IObjectContainer。只有当时间跨度真的很长(例如,您需要将对象的引用存储在不同的数据库中并以某种方式处理它)时,它才会使用 UUID。正如您已经指出的那样,这需要将 ID 存储在其他地方,从而使您的架构复杂化。

但是,如果您打算创建一个新对象并“覆盖”旧对象,那么由于可能引用它的其他对象,事情会变得更加复杂。然而,这是一种病态的情况,通常应该在域模型本身内处理,例如通过将对象数据从一个对象复制到另一个对象。

于 2010-02-27T17:11:36.747 回答