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