Db4o - 如何一步重命名字段?

Posted

技术标签:

【中文标题】Db4o - 如何一步重命名字段?【英文标题】:Db4o - how to rename a field in one step? 【发布时间】:2012-09-07 04:55:50 【问题描述】:

正如我在db4o documentation(.net 版本)中所读到的,我认为要重命名类中的字段,我必须将以下内容添加到我的代码中(当然,还要重命名类中的实际字段):

IEmbeddedConfiguration configuration = Db4oEmbedded.NewConfiguration();
configuration.Common.ObjectClass("Namespace.ClassName, AssemblyName").
   ObjectField("fieldname").Rename("newfieldname");

然后把这段代码留在那里。但是我对此进行了测试,但它不起作用(数据库中的对象不会加载重命名的字段)。起作用的是按照this page 中的说明进行操作,这些说明是

    配置重命名 使用1中创建的配置打开数据库 关闭数据库 更改代码中的字段名称 现在再次打开数据库时不要配置重命名。

这对我来说似乎有点奇怪。我的程序需要只使用 rename 调用运行一次,然后运行没有 rename 调用但重命名实际字段。问题是:有没有一种方法可以一步有效地重命名?

有效的步骤可能意味着一些额外的工作,例如,在更新嵌入式(移动)应用程序的过程中 - 在客户端上安装新版本(重构)之前,有必要运行一次重命名调用.有没有办法避免它?我是否遗漏了什么或者有其他方法可以重命名 db4o 数据库中的字段?

【问题讨论】:

对我也不起作用。错误? 可悲的是,这对我来说也开始像一个错误...... 【参考方案1】:

我在配置中重命名也没有运气,但我发现以下方法效果很好:

static void RenameFields() 
    using (IObjectContainer db = Db4oEmbedded.OpenFile("mydb.db4o")) 
        db.Ext().StoredClass(typeof(MyType)).GetStoredFields().Single(f => f.GetName() == "<ID>k__BackingField").Rename("<Id>k__BackingField");
    

MyType 也可以使用下面函数给出的完全限定类名来指定,它列出了所有存储的类和字段名。您会注意到自动属性生成的私有字段的格式为&lt;PropertyName&gt;k__BackingField,例如&lt;Id&gt;k__BackingField 用于名为Id 的属性。

static void ShowClassNamesAndFields() 
    using (IObjectContainer db = Db4oEmbedded.OpenFile("mydb.db4o")) 
        var dbClasses = db.Ext().StoredClasses();
        foreach (var dbClass in dbClasses) 
            Debug.Print(dbClass.GetName());
            foreach (var dbField in dbClass.GetStoredFields()) 
                Debug.Print("    " + dbField.GetName());
            
        
    
   

【讨论】:

以上是关于Db4o - 如何一步重命名字段?的主要内容,如果未能解决你的问题,请参考以下文章

如何从默认 Django 模型重命名模型字段?

如何在 nest.js 中重命名 JSON 字段

Django - 如何使用 South 重命名模型字段?

如何重命名带注释的查询的字段?

js 如何批量重命名文件

如何重命名/替换 Kafka-connect SMT 结构中的字段?