我正在将最新的Hangfire v1.6与asp.net core 2.1站点一起使用。我正在使用Entity Framework core 2.1
我向hangfire提交了一份工作,但最终却出现了错误,例如我的连接已关闭或已被处置。
...时的例外情况
2018-10-25 21:35:29.1990 | [] | 10100 | ERROR | Microsoft.EntityFrameworkCore.Query | An 迭代数据库的结果时数据库中发生异常 查询上下文类型 'OmniService.DataAccess.Models.OmniServiceDbContext'。 System.ObjectDisposedException:无法访问已处置的对象。一种 导致此错误的常见原因是处理已解决的上下文 从依赖注入,然后稍后尝试使用相同的 应用程序中其他位置的上下文实例。如果您可能会发生这种情况 在上下文上调用Dispose()或将上下文包装在 使用语句。如果使用依赖注入,则应让 依赖项注入容器负责处理上下文 实例。对象名称:“ AsyncDisposer”。...
我正在使用Microsoft DI(不是autofac),并且看来保持连接开放的唯一方法是将其设置为Singleton。一旦这样做,我就会看到上下文正在跟踪一个已经存在的实例的错误...当然,我可以确保不使用任何跟踪,但是这似乎不是解决方案。
即
无法跟踪实体类型“ PostedData”的实例,因为 {'SubmitId'}具有相同键值的另一个实例已经存在 被跟踪。附加现有实体时,请确保只有一个 具有给定键值的实体实例被附加。考虑使用 'DbContextOptionsBuilder.EnableSensitiveDataLogging'以查看 冲突的键值。
关于设置dbcontext
{{1}}
所以,我想念的是为什么hangfire为什么不像我在dbcontext方面的临时服务那样?
答案 0 :(得分:1)
借助以下帖子找到了我的答案。 我以为我错过了一些Hangfire配置。实际上我做了这个改变
OLD
public async void ProcessPostedData(Guid submitId, int retry = 0)
工作
public async Task ProcessPostedData(Guid submitId, int retry = 0)
我正在调用一个异步方法,当它应该是Task时返回void。我希望这可以帮助其他人节省3个小时。