DevExpress XPO XPCollection刷新更改

时间:2013-04-09 14:14:37

标签: session devexpress xtragrid xpo

在使用UnitOfWork提交一些数据库更改后,我在使用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()

这些方法都不起作用。更改未反映在原始XPCollection中。

只有在我开始使用全新的会话时才能看到它们。显然,这是一个很大的性能问题。

如何使用UnitOfWork对另一个会话进行更改?

1 个答案:

答案 0 :(得分:1)

你说:

  

只有在我开始使用全新的会话时才能看到它们。显然,这是一个很大的性能问题。

这正是你应该做的。每次需要刷新数据时创建一个新的UnitOfWork。实例化UnitOfWork在性能方面非常便宜。如果您拥有大量Photo个对象,则应通过在Criteria构造函数中指定XPCollection<Photo>参数来仅加载所需对象来提高性能。

当您发出Reload()时,它不会从数据库中获取任何内容:它会丢弃所有更改并从会话标识映射重新加载该对象。您可以阅读this articlethis Support Center issue了解详情。

顺便说一句,DevExpress Support Center是迄今为止提出DevExpress问题的最佳地点。