Linq DataContext 最佳实践

4

什么是在C# WPF中处理Linq数据库DataContext的最佳实践?使用全局应用程序范围内共享的DataContext,还是为每个事务打开一个自己的DataContext?

根据msdnStackOverflow上的信息,建议为每个事务创建一个新的DataContext。但在我的情况下,我想在一个viewmodel中查找数据,并将其传递给另一个viewmodel以更改值。在更改的viewmodel中创建新的DataContext会导致对象状态不匹配。(第一个viewModel中选择的对象在第二个viewModel的DataContext中不存在,因为该对象绑定到旧的DataContext)更好地理解的顺序图。

enter image description here

"EditViewModel" 无法使用新的 DataContext 编辑传递的值,因为该对象与 "LookupViewModel" 的 DataContext 相关联。
我想过同时传递 DataContext。但由于 LookupViewModel 调用 EditViewModel 的时间没有限制,DataContext 可能会过时(刷新是必要的)。此外,有时我从不同的 DataContext 的不同 viewModels 传递值到一个 editViewModel。
如何在另一个 DataContext 中处理来自 DataContext 的对象而不收到任何异常?或者我应该完全重新考虑整个应用程序设计吗?"

1
有一篇关于DataContext作用域的不错博客,其中提供了一些解决方案。虽然是针对Entity Framework的,但同样适用于linq。http://mehdi.me/ambient-dbcontext-in-ef6/ - Mats391
1个回答

1

你的ViewModels不应该知道DataContext,这对它们来说是太低级的细节。

它们绝对不应该创建它们!- 所以你应该首先研究Ioc\DI模式。

此外,你应该添加一个额外的层(通常称为DAL)来抽象管理DB状态的低级细节。

另外,如果你的应用程序很大,请考虑使用Repository和UnitOfWork模式。

因此,总结一下:

  1. 依赖注入

  2. DAL

  3. 仓储(也许还有UnitOfWork)


感谢这些关键词,我会仔细研究它们。 - Bin4ry

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