In this example we have a Human class which inherits from the Primate class. Now we want to remove the Primate class and let the Human class inherit directly from the Mammal class.
Unfortunately db4o doesn't support this kind of refactoring. We need to use a work-around. Basically we create a copy of the Human class with the new Inheritance-hierarchy and the copy the existing data over.
Now the objects have the new inheritance hierarchy. You can delete the old Human-class.
IList<Human> allMammals = container.Query<Human>(); foreach (Human oldHuman in allMammals) { HumanNew newHuman = new HumanNew(""); newHuman.BodyTemperature = oldHuman.BodyTemperature; newHuman.IQ = oldHuman.IQ; newHuman.Name = oldHuman.Name; container.Store(newHuman); container.Delete(oldHuman); }
Dim allMammals As IList(Of Human) = container.Query(Of Human)() For Each oldHuman As Human In allMammals Dim newHuman As New HumanNew("") newHuman.BodyTemperature = oldHuman.BodyTemperature newHuman.IQ = oldHuman.IQ newHuman.Name = oldHuman.Name container.Store(newHuman) container.Delete(oldHuman)
Note that this example doesn't change existing references from the old instances to the new ones. You need to do this manually as well.