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

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();


此时,对“收件人”属性的更改已保存在数据库中,
但没有添加到Items属性。

我发现了一些有关db4o的信息,因为对列表的引用未更改,并且db4o不知道对列表本身的更改,因此不知道任何更改……这是正确的吗?

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

*更新:*我以为执行

database.Store(package.Items);


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

在Mono 2.11上的Debian上全部使用db4o v8

最佳答案

您偶然发现了激活深度。

看一下documentation。您可能需要明确地将更改存储在集合中:

 database.Store(page.Items)


或增加update depth。或切换到transparent persistence

10-08 14:48