代码之家  ›  专栏  ›  技术社区  ›  Chris S

在db4o中打开重命名了命名空间/程序集的对象

  •  2
  • Chris S  · 技术社区  · 15 年前

    我在.dat文件中有一组db4o格式的对象。该文件中的对象为oldNamespace.myObject、oldAssemblyName。

    问题是,我已经将名称空间和程序集重命名为更永久的名称空间和程序集。除了重命名程序集和命名空间(这是我正在做的),是否有一种方法可以将对象打开为新的程序集/命名空间名称?

    或者我是否永远都要为程序集名称和名称空间使用“mytest3”?!

    1 回复  |  直到 13 年前
        1
  •  5
  •   Chris S    15 年前

    我比想象中更快地找到了答案 wiki documentation .

    这是临时的方法:

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

    更持久的方法(它是混乱的代码,但它是临时修复的):

    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");
    }
    

    正如您所看到的,“ilist”需要更新。请确保在保存时将其保存到新文件中,否则将在输出文件中同时获取这两种类型。