2013-04-09 77 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