c# - DbContext 的良好用法

标签 c# entity-framework mvvm entity-framework-core

我正在使用 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/

相关文章:

c# - 如何在客户端拦截器方法AsyncUnaryCall中进行异步调用

c# - 如何将枚举与 Vector3 轴一起使用?

c# - 如何将所有文件编译成一个exe?

c# - 从 Windows 窗体应用程序打开 AutoCAD

javascript - 使用模板通过 Vue 清晰地分离 View 和代码

c# - MVVM 光 ViewModelLocator : How to register Singleton ViewModel?

asp.net-mvc - Automapper + EF4 + ASP.NET MVC - 出现 'context disposed' 错误(我知道为什么,但如何修复它?)

mysql - 无法从 asp.net mvc 项目连接到 MySQL

c# - 带有 ASP.NET MVC 的 Entity Framework

wpf - AvalonDock 文档 View 内容在 float 窗口后消失