Saa*_*ooq 18 dependency-injection background-process entity-framework-core asp.net-core-mvc asp.net-core
我可能没想到正确的方向.我对Dependency Injection和ASP.Net Core相当新.
我有一个ASP.Net核心网站,其中一个任务是将数据从Excel工作表导入用户将上传的数据库.excel表格可能很大,数据转换任务也很耗时,因此我希望在后台执行它们.即用户将上传工作表,响应将立即发送,后台作业/线程将导入数据.
我正在尝试通过以下方式运行后台作业:
Task.Run(() => ProcessImport(model));
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是Process导入方法调用具有存储库类的服务,这些存储库类通过作为Scoped添加的ASP.Net依赖注入容器访问AppDbContext,并且一旦响应被发回,就会释放上下文.我收到一个运行时异常,你不能在它被处置后使用上下文.
我的问题是,处理这种情况的最佳方法是什么?我应该制作AppDbContext单例吗?我应该在ProcessImport方法中创建一个新的AppDbContext实例,并将其传递给它吗?我看过DbContext不是线程安全的,所以这是一个好方法吗?
分解你的问题:
处理这种情况的最佳方法是什么?
API 处理长时间运行的任务并不理想。您可以将流程委托给后台应用程序
我应该制作 AppDbContext 单例吗?
dbContext 在 Web 应用程序场景中不应该是单例的,因为它可能会带来管理事务等问题。
处理这种情况的最佳方法是什么?
细分各种服务/流程:
我应该在 ProcessImport 方法中创建一个 AppDbContext 的新实例,然后传递它吗?
由于它不是线程安全的,因此在每个线程中创建和使用 dbContext 类的单独实例。
我读过 DbContext 不是线程安全的,所以这是一个好方法吗?
有关使用 EF dbContext 的深入指南,请查看此博客:http ://mehdi.me/ambient-dbcontext-in-ef6/
归档时间: |
|
查看次数: |
7669 次 |
最近记录: |