2

.datファイルにdb4o形式のオブジェクトのセットがあります。そのファイル内のオブジェクトは、OldNamespace.MyObject、OldAssemblyNameです。

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

または、アセンブリ名と名前空間に「MyTest3」を使用し続けていますか?!

4

1 に答える 1

5

ウィキのドキュメントで、思ったよりも早く答えを見つけました。

これは一時的な方法です。

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」を更新する必要があります。保存するときは必ず新しいファイルに保存してください。そうしないと、出力ファイルに両方のタイプが含まれます。

于 2009-07-16T14:50:51.440 に答える