【问题标题】:When dispose a dbcontext in .net core?何时在 .net 核心中配置 dbcontext?
【发布时间】:2018-11-28 22:29:59
【问题描述】:

我正在制作一个包含持久层、领域层和业务层的项目,我使用实体框架核心实现通用存储库模式和工作单元。

我想在 web api rest 和 UWP 项目中使用这个项目。

它覆盖方法的正确方法?在启动configureservices中添加上下文?什么时候dispose一个dbcontext?

【问题讨论】:

  • 当控制器被释放时,在你的存储库上调用 dispose 并且应该释放上下文。如果您使用的是服务层而不是直接从控制器与存储库对话,则在服务上调用 dispose,该服务将在 repo 上调用 dispose,这将释放上下文。
  • 如果您使用的是 EF,则不需要工作单元,因为 EF 已经以这种方式工作。在线搜索。

标签: c# entity-framework asp.net-core


【解决方案1】:

阅读有关配置 DbContext 的文档:https://docs.microsoft.com/en-us/ef/core/miscellaneous/configuring-dbcontext

基本上,您将其添加到您的服务中:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<BloggingContext>(options => options.UseSqlite("Data Source=blog.db"));
}

然后你将它注入到你想要的任何类中。一个简单的例子是将其注入到控制器中(但您可以注入到任何添加到服务中的类中):

public class MyController
{
    private readonly BloggingContext _context;

    public MyController(BloggingContext context)
    {
        _context = context;
    }

    ...
}

然后,依赖注入库将处理处置 - 您无需直接调用 Dispose。这在文档here 中有描述。

框架负责创建一个 不再需要时的依赖和处理。

【讨论】:

  • 您能否提供一个指向可以备份此文件的文档的链接:然后依赖注入库将处理处置 - 您不要直接调用 Dispose。
  • “依赖注入库将处理处置”语句通常仅适用于 ASP.NET 核心应用程序,不适用于其他长时间运行的应用程序,例如 Windows 服务。对于 ASP.NET 核心 DbContext 实例是为每个请求创建并在请求结束时处理:docs.microsoft.com/en-us/ef/core/dbcontext-configuration 这不会自动发生在其他类型的应用程序中。所以对于一个 UWP 应用来说,有必要在工作单元结束时处理 DbContext。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-08
  • 2020-04-25
  • 1970-01-01
  • 2021-01-22
  • 2023-04-03
相关资源
最近更新 更多