db4oの中で名前を変更した名前空間/アセンブリでオブジェクトを開きます

StackOverflow https://stackoverflow.com/questions/1137955

  •  16-09-2019
  •  | 
  •  

質問

私は.datファイル内のdb4o形式のオブジェクトのセットを持っています。そのファイル内のオブジェクトはOldNamespace.MyObject、OldAssemblyNameされます。

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

または私はアセンブリ名と名前空間のための「MyTest3」で永遠に立ち往生しています!

役に立ちましたか?

解決

私は<のhref =「http://developer.db4o.com/Resources/view.aspx/Reference/Implementation_Strategies/Aliases/TypeAlias」のrel =「noreferrer」に、より速く、私は私が思ったよりも答えを見つけました>ウィキドキュメントでます。

これはそれを行うための一時的な方法です

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のニーズの更新を見ることができるように。あなたが新しいファイルにそれを行う保存するときに確認してください、そうしないと、出力ファイルに両方のタイプを取得します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top