在C#WPF中处理Linq Database DataContext的最佳方法(实践)是什么?使用全局应用程序范围的DataContext,它在每个viewModel中共享,或者为每个事务打开一个自己的DataContext?
根据msdn和StackOverflow的信息,建议为每个事务创建一个新的DataContext。但在我的情况下,我想在一个viewmodel中查找数据并将它们传递给另一个viewmodel来改变值。在更改viewmodel中创建新的DataContext会导致对象状态不匹配。 (第一个viewModel中的选定对象不存在于第二个viewModel的DataContext中,因为该对象绑定到较旧的DataContext)序列图以便更好地理解
" EditViewModel"无法使用新的DataContext编辑传递的值,因为该对象与" LookupViewModel" DataContext的。
我也考虑过传递DataContext。但是由于LookupViewModel在调用editViewModel时没有时间限制,因此DataContext可能会过时。 (刷新是必不可少的)。此外,有时我会将不同的viewModel从不同的DataContexts值传递给一个editViewModel。
如何在不接收任何异常的情况下从另一个DataContext中的DataContext中处理对象?或者我不应该完全重新考虑整个应用程序设计?
答案 0 :(得分:1)
你的ViewModel不应该知道DataContext,它们的细节太低了。
他们绝对不应该创造它们! - 所以你要做的第一件事就是研究Ioc \ DI模式。
此外,您应该添加额外的层(通常称为DAL)来抽象管理DB状态的这种低级细节。
另外,如果您的应用程序很大,请考虑具有UnitOfWork模式的存储库。
因此,得出结论: 你应该研究这三种OO模式: