Я использую последнюю версию Hangfire v1.6 с сайтом asp.net core 2.1.Я использую ядро Entity Framework 2.1
Я отправляю задание в Hangfire, но у меня возникают ошибки, например, если мое соединение закрыто или удалено.
Исключение при ...
2018-10-25 21: 35: 29.1990 | [] | 10100 | ERROR | Microsoft.EntityFrameworkCore.Query | В базе данных возникла исключительная ситуация при повторении результатов запроса для типа контекста 'OmniService.DataAccess.Models.OmniServiceDbContext.System.ObjectDisposedException: невозможно получить доступ к удаленному объекту.Распространенной причиной этой ошибки является удаление контекста, который был разрешен путем внедрения зависимости, а затем попытка использовать тот же экземпляр контекста в другом месте вашего приложения.Это может произойти, если вы вызываете Dispose () для контекста или заключаете контекст в оператор using.Если вы используете внедрение зависимости, вы должны позволить контейнеру введения зависимости позаботиться об удалении экземпляров контекста.Имя объекта: 'AsyncDisposer' ....
Я использую Microsoft DI (не autofac), и кажется, что единственный способ сохранить соединение открытым - это настроить его как Singleton.Как только я делаю это, я вижу ошибки, что контекст отслеживает уже существующий экземпляр ... конечно, я могу гарантировать, что отслеживание не используется, но это кажется не решением.
т.е.
Экземпляр типа сущности «PostedData» не может быть отслежен, поскольку другой экземпляр с таким же значением ключа для {'SubmitId'} уже отслеживается.При подключении существующих объектов убедитесь, что подключен только один экземпляр объекта с данным значением ключа.Подумайте об использовании DbContextOptionsBuilder.EnableSensitiveDataLogging, чтобы увидеть конфликтующие значения ключа.
С точки зрения настройки dbcontext
//hangfire
services.AddHangfire(x => x.UseSqlServerStorage(connectionString));
services.AddDbContext<OmniServiceDbContext>(options =>
options.UseSqlServer(Configuration.GetSection("ConnectionStrings:ConnectionString").Value), ServiceLifetime.Transient);
services.AddTransient(typeof(IPostedDataService), typeof(PostedDataService));
services.AddSingleton<IConfiguration>(Configuration);
Итак, чего мне не хватает, так это почему Hangfire не нравитсямои временные услуги в отношении dbcontext?