2009-07-16 12 views
2

J'ai un ensemble d'objets au format db4o dans un fichier .dat. Les objets de ce fichier sont OldNamespace.MyObject, OldAssemblyName.Ouverture d'objets avec un espace de noms/ensemble renommé dans db4o

Le problème est que j'ai depuis renommé l'espace de noms et l'assemblage en quelque chose de plus permanent. À moins de renommer l'assembly et l'espace de noms (ce que je fais), existe-t-il un moyen d'ouvrir les objets dans les nouveaux noms d'assembly/namespace?

Ou suis-je coincé pour toujours avec "MyTest3" pour le nom de l'assembly et l'espace de noms ?!

Répondre

5

J'ai trouvé la réponse plus rapidement que je ne le pensais, dans le wiki documentation.

C'est la façon temporaire de le faire:

TypeAlias alias = new TypeAlias("OldNameSpace.OldTypeName, OldAssembly", "NewNameSpace.NewTypeName, NewAssembly"); 
Db4oFactory.Configure().AddAlias(alias); 
IObjectContainer db = Db4oFactory.OpenFile(dbfilename); 

La façon plus permanente (c'est un code compliqué, mais il est pour une solution temporaire):

using (IObjectContainer db = Db4oFactory.OpenFile(dbfilename)) 
{ 
    var n = db.Ext().StoredClasses(); 
    foreach (var x in n) 
    { 
     System.Diagnostics.Debug.WriteLine(x.GetName()); 
    } 
    var c1 = db.Ext().StoredClass("OldNameSpace.OldType, OldAssembly");// 
    if (c1 != null) 
     c1.Rename("NewNameSpace.OldType, NewAssembly"); 

    var c2 = db.Ext().StoredClass("System.Collections.Generic.List`1[[OldNameSpace.OldType, OldAssembly]], mscorlib"); 
    if (c2 != null) 
     c2.Rename("System.Collections.Generic.List`1[[NewNameSpace.OldType, NewAssembly]], mscorlib"); 
} 

Comme vous pouvez le voir « ILists » besoin de mise à jour. Assurez-vous que lorsque vous enregistrez, vous le faites dans un nouveau fichier, sinon vous obtiendrez les deux types dans le fichier de sortie.

+0

Merci pour vos questions et réponses. Je ne ferai rien de tout cela: c'est juste agréable de savoir que je ne deviens pas fou et qu'il y a vraiment un produit de base de données où les résultats de la requête dépendent des noms de variables utilisés. –