2013-04-09 78 views
0

我在使用UnitOfWork提交某些數據庫更改後刷新XPCollection中的數據時遇到問題。DevExpress XPO XPCollection刷新更改

我有一個帶有XPCollection的WinForm。

XPCollection使用XpoDefault.Session。

我通過的UnitOfWork一些變化:

using (UnitOfWork uow = new UnitOfWork()) 
    { 
    var photos = new XPCollection<Photo>(uow); 
    photos[0].Date = DateTime.Now; 
    uow.CommitTransaction(); 

    } 

要獲得原始的XPCollection更新的變化,我已經試過如下:

foreach (Photo photo in myXPCollection) 
{ 
XpoDefault.Session.Reload(photo); 
} 

foreach (Photo photo in myXPCollection) 
{ 
photo.Reload();   
} 

myXPCollection.Reload() 

的方法都沒有work.The更改不會反映在原始XPCollection中。

它們僅在我從一個全新的會話開始時纔可見。顯然,這是一個很大的性能問題。

如何獲取使用UnitOfWork進行的更改到另一個會話?

回答

1

你說:

他們是唯一可見的,當我開始一個全新的會話。顯然,這是一個很大的性能問題。

這正是你應該做的。每次您想刷新數據時創建一個新的UnitOfWork。一個UnitOfWork是非常便宜的性能明智實例化。如果您有大量的Photo對象,則應通過在構造函數XPCollection<Photo>中指定Criteria參數,僅加載所需的對象來提高性能。

當您發出Reload()時,它不會從數據庫中獲取任何東西:它會放棄任何更改並從會話標識映射中重新加載該對象。你可以閱讀this articlethis Support Center issue瞭解更多信息。

順便說一句,DevExpress Support Center是迄今爲止DevExpress提出問題的最佳位置。

+0

每次創建一個新會話對我來說都不合邏輯。沒有辦法強制從數據源刷新現有的XPCollection/Session嗎? – SharpAffair 2013-04-09 14:42:16

+0

您不需要從數據源刷新。哦,我明白了,你正在使用錯誤的提交。將其更改爲'uow.CommitChanges()'。 – shamp00 2013-04-09 15:00:26

+0

'CommitTransaction()'用於[transactions](http://documentation.devexpress.com/#XPO/CustomDocument2111)。 – shamp00 2013-04-09 15:01:17