Linq Datacontext和“工作单元”

4
在 Linq 中,现在的流行词是“工作单元”,也就是说,“只有在一个工作单元内保持您的数据上下文存在”,然后将其销毁。
我有几个问题:
1. 我正在创建一个 WPF 应用程序。因此,我的数据上下文需要跟踪当前屏幕上为用户提供的整个实例化对象网络。什么时候可以销毁我的数据上下文?
2. 我基于用户的操作和与第一个数据上下文中的对象的交互逐渐构建一个 Linq 查询。如何创建一个新的数据上下文并在新的上下文中执行查询?
希望我表达清楚了。谢谢!
2个回答

1

工作单元并不等同于仅在一个工作单元中保留您的数据上下文

工作单元是一种设计模式,描述了如何以抽象的方式表示事务。它实际上只需要用于创建、更新和删除(CUD)操作。

一种哲学是,UoW用于所有CUD操作,而只读存储库用于读取操作。

无论如何,我建议将对象生命周期与UoW或存储库使用分离。使用依赖注入(DI)将两者注入到您的消费服务中,并让DI容器管理两者的生命周期。

在Web应用程序中,我的经验是对象上下文应仅保持活动状态一个请求(每个请求的生命周期)。另一方面,对于像您描述的这样的富客户端,长时间保持活动状态可能更有效(单例生命周期)。

通过让DI容器管理对象上下文的生命周期,您不会将自己绑定到一个特定的选择。


0
我正在创建一个WPF桌面应用程序。
好的。
因此,我的数据上下文需要跟踪当前屏幕上用户可用的实例化对象的整个网络。
不行。那些类是数据库映射类,它们不是UI呈现类。
如何创建一个新的DataContext并在新的上下文中执行查询?
Func<DataContext, IQueryable<Customer>> queryWithoutADataContext =
  dc =>
    from cust in dc.Customers
    where cust.name == "Bob"
    select cust;

Func<DataContext, IQueryable<Customer>> moreFiltered =
  dc =>
    from cust in queryWithoutADataContext(dc)
    where cust.IsTall
    select cust;

var bobs = queryWithoutADataContext(new DataContext);
var tallbobs = moreFiltered(new DataContext);

你不会冒着将dc实例封装为委托而提前处理它们的风险吗?在延迟执行的情况下,dc实例需要存在,对吗? - Matt Kocaj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接