db4o似乎不存储添加到List <t> </t>的项目

时间:2012-11-21 03:17:35

标签: 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时应如何处理List of T?

* 更新:* 我想要执行

database.Store(package.Items);

会有所帮助,但事实并非如此。

这都是在使用Mono 2.11的Debian上使用db4o v8

2 个答案:

答案 0 :(得分:5)

你偶然发现了激活深度。

看看documentation。您需要明确存储集合中的更改:

 database.Store(page.Items)

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

答案 1 :(得分:3)

除了Gamlor提到的选项之外,您还可以在Store方法本身明确定义更新深度(重载的Store方法隐藏在Ext中),如:

database.Ext().Store(package, int.MaxValue);