gpt4 book ai didi

c# - 具有 MVVM 数据绑定(bind)的 session /事务管理 NHibernate

转载 作者:太空宇宙 更新时间:2023-11-03 16:26:53 25 4
gpt4 key购买 nike

也许我已经以“理想”的方式这样做了,但不知何故我觉得不对。

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

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

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

代码示例:

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

_unitOfWork = new UnitOfWork();

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

我实际上希望此时所有对象都进行数据绑定(bind),并且在数据绑定(bind)完成后我想处理 UoW。

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

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

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

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

最佳答案

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

当前的方法没有任何问题。无法在事务中进行延迟加载并不是什么大问题。

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

关于c# - 具有 MVVM 数据绑定(bind)的 session /事务管理 NHibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313939/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com