2009-07-16 10 views
2

db4o形式のオブジェクトのセットが.datファイルにあります。そのファイル内のオブジェクトは、OldNamespace.MyObject、OldAssemblyNameです。db4oで名前が変更された名前空間/アセンブリを持つオブジェクトを開く

私は名前空間とアセンブリの名前を変更して以来、より永続的なものにしています。アセンブリと名前空間(私がやっていることです)の名前を変更するのは簡単ではありませんが、オブジェクトを新しいアセンブリ/名前空間名に開く方法はありますか?

または、私はアセンブリ名と名前空間に「MyTest3」と永遠に残っていますか?

答えて

5

答えは私が考えたよりも速く、wiki documentationにありました。

これはそれを行うための一時的な方法である:あなたが「ILists」を見ることができるように

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

:より恒久的な方法(それは汚いコードだが、それは一時修正のためです)

TypeAlias alias = new TypeAlias("OldNameSpace.OldTypeName, OldAssembly", "NewNameSpace.NewTypeName, NewAssembly"); 
Db4oFactory.Configure().AddAlias(alias); 
IObjectContainer db = Db4oFactory.OpenFile(dbfilename); 

更新が必要です。新しいファイルに保存するときは必ずそれを確認してください。そうしないと、両方のタイプが出力ファイルに取り込まれます。

+0

ご質問ありがとうございます。私は実際にこれを実行しません。私が狂っていないことを知ってうれしいです。実際にはクエリの結果が使用される変数名に依存するデータベース製品があります。 –

関連する問題