L'ouverture des objets avec une renommé de l'espace de noms/assemblée db4o

StackOverflow https://stackoverflow.com/questions/1137955

  •  16-09-2019
  •  | 
  •  

Question

J'ai un ensemble d'objets dans db4o format en un .dat fichier.Les objets dans ce fichier sont OldNamespace.Monobjet, OldAssemblyName.

Le problème c'est que j'ai renommé depuis l'espace de noms et d'assemblage à quelque chose de plus permanent.Bref la modification du nom de l'assemblée et de l'espace de noms (qui est ce que je fais), il est un moyen d'ouvrir les objets dans la nouvelle assemblée/espaces de noms?

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

Était-ce utile?

La solution

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

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

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

La plus de façon permanente (c'est le code désordre mais c'est pour un correctif 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 de le faire dans un nouveau fichier, sinon vous aurez les deux types dans le fichier de sortie.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top