c# - db4o 似乎不存储添加到 List<T> 的项目

标签 c# .net db4o

假设我有一个看起来像这样的模型(假的,但作为示例)

public class PackageItem
{
    public string Name { get; set;}
    public bool Available { get; set;}
}

public class Package
{
    public string Recipient { get; set;}
    public List<PackageItem> Items { get; set;}
}

首先创建一个新的 Package 实例,只将 Recipient 设置为某个值。

一段时间后,(期间数据库已经关闭),我从数据库中检索 并向其中添加项目:

var packages = database.Query<Package>()
foreach(var package in packages)
{
    package.Recipient = "Bla bla bla";
    package.Items.Add(new PackageItem() { Name = "SomeName", Available = true });
    database.Store(package);
}
database.Commit();

此时对 Recipient 属性的更改已保存在数据库中, 但 Items 属性的添加不是。

我发现一些关于 db4o 的信息不知道有什么变化,因为对 List 的引用没有改变并且 db4o 不知道 List 本身的变化......这是正确的吗?

在使用 db4o 时应该如何处理 T 列表?

*更新:*我想执行

database.Store(package.Items);

会有所帮助,但没有帮助。

这一切都是在带有 Mono 2.11 的 Debian 上使用 db4o v8

最佳答案

您偶然发现了激活深度。

看看 documentation .您要么需要将更改明确存储在集合中:

 database.Store(page.Items)

或者增加update depth .或转transparent persistence .

关于c# - db4o 似乎不存储添加到 List<T> 的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13485800/

相关文章:

c# - 在 DB4O 中执行 "SELECT TOP n"

c# - 脱机时未分配 Azure 移动服务标识列

javascript - 为什么 Ajax 调用没有被命中?

c# - 如何在 ASP.Net 中禁用按钮

.net - 如何在 Windows 窗体 TextBox 控件中设置 TAB 宽度?

c# - 在.NET中在运行时合并自定义配置节

c# - Entity Framework Core - 迁移 - 没有为此对象定义无参数构造函数

c# - 将一条线缩短若干像素

java - 当我指定类时,Db4o 查询 By Example() 方法的结果为空

java - 如何从 Web 应用程序使用 OSGi 服务?