Открытие объектов с переименованным пространством имен / сборкой в ​​db4o - PullRequest
2 голосов
/ 16 июля 2009

У меня есть набор объектов в формате db4o в файле .dat. Объектами в этом файле являются OldNamespace.MyObject, OldAssemblyName.

Проблема в том, что я с тех пор переименовал пространство имен и сборку в нечто более постоянное. Если не считать переименования сборки и пространства имен (что я и делаю), есть ли способ открыть объекты в новых именах сборки / пространства имен?

Или я застрял навсегда с «MyTest3» для имени сборки и пространства имен?!

1 Ответ

5 голосов
/ 16 июля 2009

Я нашел ответ быстрее, чем думал, в вики документации .

Это временный способ сделать это:

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» нуждается в обновлении. Убедитесь, что при сохранении вы делаете это в новый файл, иначе вы получите оба типа в выходном файле.

...