也许我已经以“理想”的方式做到了这一点,但不知何故,这对我来说感觉不对。
我有一个搜索表单,在找到结果后会立即通过不同的控件显示信息(其中三个是相互绑定的数据网格)。
目前,我已将我的 UoW 管理设置如下:
- 当用户开始搜索时,检查我们是否有旧的 UoW 并处理它(它是会话)
- 创建一个新的 UoW
- 开始交易
- 执行搜索
- 提交事务
代码示例:
if(_unitOfWork != null)
{
_unitOfWork.Dispose();
}
_unitOfWork = new UnitOfWork();
_unitOfWork.Begin();
ICollection<Case> cases = casesQuery.ToList();
_unitOfWork.Commit();
iDeally 我现在希望所有对象都被数据绑定,并且在数据绑定完成后我想处置 UoW。
可悲的是,我不能这样做,因为延迟加载beeing 对三个数据网格中的两个进行数据绑定。在这些实体中显式加载集合和对象图并不是一个真正的选择,因为其中一些实体是具有不同属性和引用的子类。显式加载这些似乎需要做很多工作。
我想知道的是是否有办法让它变得更好,我考虑了以下几点:
- 使用转换器获取数据绑定的值,找出它是否是代理,如果是则加载此代理。这意味着我必须为每个数据绑定属性设置一个转换器,这又看起来效率低下
- 显式加载,不这样做的原因上面提到了
- 我目前的解决方案是让 UoW 跨越“搜索”,最大的问题是我无法在延迟加载东西时保持交易打开。(我可以,但这似乎是一件非常糟糕的事情,因为用户可以无限期地保持交易开放)
有没有人有更好的方法来处理这种情况,或者我目前正在做的最好的事情是什么?