2010-09-27 95 views
3

Comment est-ce que je peux faire ceci?
Je stocké un objet dans db4o, par exemple:db4o, comment mettre à jour un objet si un champ a été ajouté?

class Person { 
    string _name; 
    int _age; 
} 

maintenant, après hundrets des personnes stockées dans la db, j'ai ajouté un nouveau champ:

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

Quand je charge l'ancien Les classes avec la nouvelle classe, le _newField sera null ou la valeur par défaut. Lorsque je le sauvegarde dans la base de données, le champ ajouté est supprimé.

Comment puis-je mettre à jour tous les objets existants avec le nouveau champ? Est-ce possible?

Répondre

2

Comme vous l'avez dit, lorsque vous ajoutez un nouveau champ, il a la valeur par défaut pour l'objet existant. Maintenant, vous pouvez simplement charger un objet, définir une valeur dans le champ et le stocker à nouveau. Ensuite, les données sont stockées pour ce champ. Voir aussi sur le documentation.

Donc, vous devriez être en mesure de charger un objet et le mettre à jour:

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 

Je pense que devrait être « vide » la valeur par défaut pour un bool Nullable.

Si cela ne fonctionne pas, cela ressemble à un bug. Quelle version utilisez-vous?

+0

Ok, le champ semble être mis à jour. Mais le "VisualStudio Objectmanager Plugin" ne l'affiche pas. J'utilise 7.12.132.14217 – chriszero

+0

Oh, alors ça pourrait être un bug d'ObjectManager. – Gamlor