У меня есть набор объектов в формате db4o в файле .dat. Объектами в этом файле являются OldNamespace.MyObject, OldAssemblyName.
Проблема в том, что с тех пор я переименовал пространство имен и сборки в нечто более постоянное. За исключением переименования сборки и пространства имен (это то, что я делаю), есть ли способ открыть объекты в новых именах сборки/имен?
Или я застрял навсегда с "MyTest3" для имени сборки и пространства имен?!
Я нашел ответ быстрее, чем я думал, в вики-документации.
Это временный способ сделать это:
TypeAlias alias = new TypeAlias("OldNameSpace.OldTypeName, OldAssembly", "NewNameSpace.NewTypeName, NewAssembly");
Db4oFactory.Configure().AddAlias(alias);
IObjectContainer db = Db4oFactory.OpenFile(dbfilename);
Более постоянный способ (это грязный код, но он для исправления temp):
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");
}
Как вы можете видеть, "Илисты" нуждаются в обновлении. Убедитесь, что при сохранении вы делаете это в новом файле, иначе вы получите оба типа в выходном файле.