【问题标题】:Opening objects with a renamed namespace/assembly in db4o在 db4o 中使用重命名的命名空间/程序集打开对象
【发布时间】:2009-07-16 14:21:31
【问题描述】:

我在 .dat 文件中有一组 db4o 格式的对象。该文件中的对象是 OldNamespace.MyObject、OldAssemblyName。

问题是我已经将命名空间和程序集重命名为更永久的东西。没有重命名程序集和命名空间(这就是我正在做的),有没有办法将对象打开到新的程序集/命名空间名称中?

或者我是否永远坚持使用“MyTest3”作为程序集名称和命名空间?!

【问题讨论】:

    标签: c# db4o


    【解决方案1】:

    我在wiki documentation 中找到答案的速度比我想象的要快。

    这是临时的做法:

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

    如您所见,“IList”需要更新。确保在保存时将其保存到新文件中,否则您将在输出文件中获得这两种类型。

    【讨论】:

    • 感谢您的提问和回答。我实际上不会这样做:很高兴知道我不会发疯,而且确实有一个数据库产品,其中查询的结果取决于所使用的变量名。
    猜你喜欢
    • 1970-01-01
    • 2010-10-14
    • 2015-03-06
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    相关资源
    最近更新 更多