2012-11-21 59 views
1

比方說,我有一個模型,看起來像這樣(假的,但作爲一個例子)db4o的似乎並不存儲添加到列表中的項目<T>

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;} 
} 

第一包裝的一個新的實例與剛剛創建收件人設置爲某個值。

一段時間後,(數據庫已經關閉之間),我從數據庫中 檢索和添加項目:

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的一些信息,因爲對List的引用沒有改變,db4o不知道任何東西已經改變,db4o也不知道List對它自己的更改......這是正確的嗎?

如何使用db4o處理T列表?

* 更新:*我想執行

database.Store(package.Items); 

會幫助,但事實並非如此。

這是Debian上全部採用了db4o V8使用Mono 2.11

回答

5

你在激活深度絆倒了。

看看documentation。您可能需要explicilty存儲集合中的變化:

database.Store(page.Items) 

,或者提高update depth。或切換到transparent persistence

+0

database.Store(package.Items)不起作用。 .. – TimothyP

+0

這很奇怪。你有一個運行的例子嗎? – Gamlor

+0

我會試着去看看它是否可以單獨使用,但它是一個更大的系統的一部分,但它很奇怪。我使用database.Query 來獲取對象,我使用for each循環遍歷它們,將一些項添加到列表中並將它們存儲(object.list和object本身),然後在我提交的循環之後。日誌記錄顯示了所有這些情況......但數據庫列表中沒有任何內容 – TimothyP

3

除了通過Gamlor提到的選項也可以明確地定義存儲方法本身(重載商店方法是隱藏在EXT)像更新深度:

database.Ext().Store(package, int.MaxValue); 
相關問題