2

也许我已经以“理想”的方式做到了这一点,但不知何故,这对我来说感觉不对。

我有一个搜索表单,在找到结果后会立即通过不同的控件显示信息(其中三个是相互绑定的数据网格)。

目前,我已将我的 UoW 管理设置如下:

  • 当用户开始搜索时,检查我们是否有旧的 UoW 并处理它(它是会话)
  • 创建一个新的 UoW
  • 开始交易
  • 执行搜索
  • 提交事务

代码示例:

if(_unitOfWork != null)
{
    _unitOfWork.Dispose();
}

_unitOfWork = new UnitOfWork();

_unitOfWork.Begin();
ICollection<Case> cases = casesQuery.ToList();
_unitOfWork.Commit();

iDeally 我现在希望所有对象都被数据绑定,并且在数据绑定完成后我想处置 UoW。

可悲的是,我不能这样做,因为延迟加载beeing 对三个数据网格中的两个进行数据绑定。在这些实体中显式加载集合和对象图并不是一个真正的选择,因为其中一些实体是具有不同属性和引用的子类。显式加载这些似乎需要做很多工作。

我想知道的是是否有办法让它变得更好,我考虑了以下几点:

  • 使用转换器获取数据绑定的值,找出它是否是代理,如果是则加载此代理。这意味着我必须为每个数据绑定属性设置一个转换器,这又看起来效率低下
  • 显式加载,不这样做的原因上面提到了
  • 我目前的解决方案是让 UoW 跨越“搜索”,最大的问题是我无法在延迟加载东西时保持交易打开。(我可以,但这似乎是一件非常糟糕的事情,因为用户可以无限期地保持交易开放)

有没有人有更好的方法来处理这种情况,或者我目前正在做的最好的事情是什么?

4

1 回答 1

0

在 MVVM 应用程序中,最常见的模式是每个 VM 都有一个会话。这无需太多额外的工作就可以实现延迟加载和富客户端更改跟踪。

目前的做法没有任何问题。不能在事务中进行延迟加载并不是什么大不了的事。

现在,如果您可以创建基于反射的解决方案,显式加载看起来并不像“太多工作”。但是您仍然需要知道要加载什么。无论如何,这比转换器的想法要少得多。

于 2012-09-07T12:43:31.693 回答