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

2024-06-05

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

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

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


我比我想象的更快地找到了答案维基文档 http://developer.db4o.com/Resources/view.aspx/Reference/Implementation_Strategies/Aliases/TypeAlias.

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

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

如您所见,“ILists”需要更新。确保在保存时将其保存到新文件中,否则您将在输出文件中获得两种类型。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐