打开对象与重命名的命名空间/组件的db4o(Opening objects with a renam

2019-09-19 05:23发布

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

问题是我一直以来改名为命名空间和装配的东西更持久。 短重命名集和命名空间(这是我在做什么),有没有打开的对象到新的组装/命名空间名称的方式?

还是我用“MyTest3”永远停留在组装名称和命名空间?

Answer 1:

我找到了答案的速度比我以为我会中,在wiki文档 。

这是做它的临时办法:

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”需要更新。 确保当您保存它做一个新的文件,否则就会在输出文件中得到两种类型。



文章来源: Opening objects with a renamed namespace/assembly in db4o
标签: c# db4o