我是db4o的新手。
我有这个问题:当从DAL检索对象时,它可能会在业务层更新,然后我们失去了它的原始属性,所以在更新时如何找到数据库中的原始对象更新?
您需要更精确地了解“对象”。如果您修改对象实例的属性,只需再次存储它就会执行更新:
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 存储在其他地方,从而使您的架构复杂化。
但是,如果您打算创建一个新对象并“覆盖”旧对象,那么由于可能引用它的其他对象,事情会变得更加复杂。然而,这是一种病态的情况,通常应该在域模型本身内处理,例如通过将对象数据从一个对象复制到另一个对象。