我正在使用 EntityFramework 创建我的第一个应用程序。我正在使用 Entity Framework Core 和 MVVMLight。
我创建了一个 DbContext 子类。我想知道何时实例化此 DbContext。
我的第一个想法是为每个 View 创建一个实例。
想象一下以下场景:
- 我有一个 Item 类
- 我创建了一个 ItemsViewModel 来管理项目列表。在此 viewModel 中,我为 DbContext 添加了一个属性
- 当用户双击某个项目时,它会显示在与 ItemViewModel 关联的详细 View 中。此 View 模型还有一个我的 DbContext 实例。
当用户退出详细 View 时:
- 如果他保存了,我更新列表的 DbContext
- 如果他取消了,则不必更新列表
这是正确的做事方式吗?我在某处读到应该只有 1 个 DbContext 实例。但在这种情况下,对详细 View 的每个修改都会传播到 ListView ,即使详细 View 被取消也是如此。
非常感谢聆听
最佳答案
因此,您正在开发 WPF 应用程序,您可以为每个表单使用一个上下文实例。
这是来自 EF 团队的:
When working with Windows Presentation Foundation (WPF) or Windows Forms, use a context instance per form. This lets you use change-tracking functionality that context provides.
我想推荐使用依赖注入(inject) (DI) 的存储库模式。这样你就不需要担心实例化和处置 dbcontext。这些是自动的。
因此您使用的是 EF 核心,您可以使用 Autofac作为 DI API。
适合您的文章: How to work with DbContext
另一篇很好的文章,其中解释了如何基于带有 Entity Framework 的通用存储库模式、IoC 容器和依赖注入(inject)来实现一个解耦的、可单元测试的 N 层架构。是的,这篇文章是针对 MVC 的。但您可以通过本文深入了解此模式。
Generic Repository and Unit of Work Pattern, Entity Framework,Autofac
关于c# - DbContext 的良好用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39740816/