我在 .dat 文件中有一组 db4o 格式的对象。该文件中的对象是 OldNamespace.MyObject、OldAssemblyName。
问题是我已经将命名空间和程序集重命名为更永久的东西。除了重命名程序集和命名空间(这就是我正在做的)之外,有没有办法将对象打开到新的程序集/命名空间名称中?
还是我永远坚持使用“MyTest3”作为程序集名称和命名空间?!
在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");
}
如您所见,“IList”需要更新。确保在保存时将其保存到新文件中,否则您将在输出文件中获得两种类型。