DbContext的良好用法

Jul*_*aro 1 c# entity-framework mvvm entity-framework-core

我正在使用EntityFramework创建我的第一个应用程序.我正在使用Entity Framework Core和MVVMLight.

我创建了一个DbContext后代类.我想知道何时实现这个DbContext.

我的第一个想法是为每个View创建1个实例.

想象一下以下场景:

  • 我有一个Item类
  • 我创建了一个ItemsViewModel来管理项目列表.在这个viewModel中,我为DbContext添加了一个属性
  • 当用户双击某个项目时,它将显示在与ItemViewModel关联的详细视图中.此视图模型还具有我的DbContext的实例.

当用户退出详细信息视图时:

  • 如果他保存,我更新列表的DbContext
  • 如果他取消了,则不必更新列表

这是一种正确的做事方式吗?我已经读过某个地方应该只有一个DbContext实例.但在这种情况下,即使细节视图被取消,对细节视图的每个修改都会传播到列表视图.

很多人都喜欢听

Sam*_*ath 5

因此,您正在开发WPF应用程序,您可以为每个表单使用上下文实例.

来自EF团队:

使用Windows Presentation Foundation(WPF)或Windows窗体时,请为每个窗体使用上下文实例.这使您可以使用上下文提供的更改跟踪功能.

我建议使用带有依赖注入(DI)的存储库模式.然后,您不必担心实例化和处理dbcontext.那是自动的.

因此,您使用EF核心,您可以使用Autofac作为DI API.

适合您的好文章: 如何使用DbContext

另一篇很好的文章,它解释了如何实现基于通用存储库模式与实体框架,IoC容器和依赖注入的解耦,可单元测试的N层架构.是的,本文适用于MVC.但是,您可以使用本文了解此模式.

通用存储库和工作单元模式,实体框架,Autofac