会话/事务管理NHibernate与MVVM数据绑定

时间:2012-09-07 07:50:37

标签: c# wpf nhibernate data-binding mvvm

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

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

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

  • 当用户开始搜索时,检查我们是否有旧的UoW并处理它(以及它的会话)
  • 制作新的UoW
  • 开始交易
  • 执行搜索
  • 提交交易

代码示例:

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

_unitOfWork = new UnitOfWork();

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

iDeally我希望此时所有对象都可以数据绑定,并且在数据绑定完成后我想要处理UoW。

可悲的是,我无法做到这一点,因为对三个数据网格中的两个进行了数据绑定的延迟加载。明确加载集合&amp;这些实体中的对象图实际上不是一个选项,因为这些实体中的一些是具有不同属性的子类。引用。明确加载这些似乎很有用。

我想知道的是,如果有办法让这更好,我考虑过以下几点:

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

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

1 个答案:

答案 0 :(得分:0)

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

目前的做法没有错。无法在交易中进行延迟加载并不是一件大事。

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