0

使用 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 对另一个会话进行更改?

4

1 回答 1

1

你说:

只有当我开始一个全新的会话时,它们才可见。显然,这是一个很大的性能问题。

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

当您发出Reload()它时,它不会从数据库中获取任何内容:它会丢弃任何更改并从会话身份映射中重新加载对象。您可以阅读本文此支持中心问题以获取更多信息。

顺便说一句,DevExpress 支持中心是迄今为止询问 DevExpress 问题的最佳场所。

于 2013-04-09T14:35:57.177 回答