Search code examples
c#db4o

db4o, how to update an object if a field was added?


How can I do this?
I stored an object in db4o, e.g:

class Person {
    string _name;
    int _age;
}

now, after hundrets of Persons stored in the db, I've added a new field:

class Person {
    string _name;
    int _age;
    bool? _newField;
}

When I load the old classes with the new class, the _newField will be null or the default value. When I save it back to the db, the added field is obmitted.

How can I update all existing objects with the new field? Is that possible?


Solution

  • As you said, when you add a new field it has the default value for existing object. Now you just can load a object, set a value to the field and store it again. Then the data is stored for that field. See also on the documentation.

    So you should be able to load a object and update it:

    IObjectContainer container = ...
    var persons = from Person p in container                  
                  select p;
    
    foreach(var p in persons){
         p.NewField = true; // new value
         container.Store(p);
    }
    
    // done
    

    I think the default value for a Nullable bool should be 'empty'.

    If that doesn't work, it looks like a bug. Which version are you using?