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

Chr*_*s S 2 c# db4o

我在.dat文件中有一组db4o格式的对象.该文件中的对象是OldNamespace.MyObject,OldAssemblyName.

问题是我已经将命名空间和程序集重命名为更永久的东西.短重命名集和命名空间(这是我在做什么),有没有打开的对象到新的组装/命名空间名称的方式?

或者我是否永远坚持使用"MyTest3"作为程序集名称和命名空间?!

Chr*_*s S 5

wiki文档中,我发现答案比我想象的要快.

这是执行此操作的临时方式:

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

更永久的方式(它是凌乱的代码,但它是临时修复):

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");
}
Run Code Online (Sandbox Code Playgroud)

正如您所见,'ILists'需要更新.确保在保存时将其添加到新文件中,否则您将在输出文件中获得这两种类型.