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

问题描述:

我在.dat文件中有一组db4o格式的对象。该文件中的对象是OldNamespace.MyObject,OldAssemblyName。使用db4o中的重命名命名空间/程序集打开对象

问题是我已经将命名空间和程序集重命名为更永久的东西。没有重命名程序集和名称空间(这就是我正在做的),有没有办法将对象打开到新的程序集/名称空间名称中?

还是我永远坚持“MyTest3”的程序集名称和命名空间?

我发现答案比我想象的要快,在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"); 
} 

正如你可以看到“ILists”需要更新。确保当您保存时将其添加到新文件中,否则您将在输出文件中获得这两种类型。

+0

感谢您的问题和答案。我实际上不会做任何这样的事情:只是很高兴知道我不会精神失常,并且确实有一个数据库产品,其中查询的结果取决于所使用的变量名称。 – 2011-10-28 14:53:45