gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:55:22 25 4
gpt4 key购买 nike

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

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

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

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

我觉得这有点奇怪。我的程序需要仅通过重命名调用运行一次,并且在没有重命名调用但实际字段已重命名的情况下运行。问题是:有没有一种方法可以一步完成有效的重命名?

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

最佳答案

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

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也可以使用下面函数给出的完全限定类名来指定,它列出了所有存储的类和字段名。您会注意到自动属性生成的私有(private)字段的形式为 <PropertyName>k__BackingField ,例如 <Id>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());
}
}
}
}

关于c# - Db4o - 如何一步重命名一个字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12417518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com