2
我在.dat文件中有一組db4o格式的對象。該文件中的對象是OldNamespace.MyObject,OldAssemblyName。使用db4o中的重命名命名空間/程序集打開對象
問題是我已經將命名空間和程序集重命名爲更永久的東西。沒有重命名程序集和名稱空間(這就是我正在做的),有沒有辦法將對象打開到新的程序集/名稱空間名稱中?
還是我永遠堅持「MyTest3」的程序集名稱和命名空間?
我在.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」需要更新。確保當您保存時將其添加到新文件中,否則您將在輸出文件中獲得這兩種類型。
感謝您的問題和答案。我實際上不會做任何這樣的事情:只是很高興知道我不會精神失常,並且確實有一個數據庫產品,其中查詢的結果取決於所使用的變量名稱。 – 2011-10-28 14:53:45