在使用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对另一个会话进行更改?
答案 0 :(得分:1)
你说:
只有在我开始使用全新的会话时才能看到它们。显然,这是一个很大的性能问题。
这正是你应该做的。每次需要刷新数据时创建一个新的UnitOfWork
。实例化UnitOfWork
在性能方面非常便宜。如果您拥有大量Photo
个对象,则应通过在Criteria
构造函数中指定XPCollection<Photo>
参数来仅加载所需对象来提高性能。
当您发出Reload()
时,它不会从数据库中获取任何内容:它会丢弃所有更改并从会话标识映射重新加载该对象。您可以阅读this article和this Support Center issue了解详情。
顺便说一句,DevExpress Support Center是迄今为止提出DevExpress问题的最佳地点。