在使用XPCollection完成一些数据库更改之后,我遇到了一个在UnitOfWork中刷新数据的问题。
我有一个WinForm和一个XPCollection。
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进行的更改转移到另一个会话?
发布于 2013-04-09 14:35:57
你说过:
只有当我以一个全新的会话开始时,它们才是可见的。显然,这是一个很大的性能问题。
这正是你应该做的。每次需要刷新数据时都创建一个新的UnitOfWork。UnitOfWork是非常便宜的性能实例化。如果您拥有大量的Photo对象集合,则应该通过在XPCollection<Photo>构造函数中指定Criteria参数来仅加载所需的对象来提高性能。
当您发出Reload()时,它不会从数据库中获取任何内容:它丢弃任何更改,并从会话标识映射重新加载对象。有关更多信息,您可以阅读这篇文章和这个支持中心的问题。
顺便说一下,到目前为止,DevExpress支持中心是问DevExpress问题的最佳场所。
https://stackoverflow.com/questions/15904351
复制相似问题