答案 0 :(得分:2)
您应该通过其ID加载对象:
objectContainer.get().ext().getByID(id);
或通过其UUID:
objectContainer.get().ext().getByUUID(uuId);
See the docs为后者。有关说明,请参阅答案here或文档here。简而言之,只使用uuid进行长期参考。
答案 1 :(得分: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存储在其他地方,从而使您的架构变得复杂。
如果您打算创建一个新对象并“覆盖”旧对象,由于可能引用它的其他对象,事情会变得更复杂一些。然而,这是一种病态病例,通常应在域模型本身内处理,例如,通过将对象数据从一个对象复制到另一个对象。