Quartz.NET не работает вместе с Entity framework

141
18 апреля 2022, 00:00

Если в классе OrderTime создам конструктор c базой, то метод Execute перестает работать. Кто знает как решить эту проблему? Может можно реализовать это как то по другому. В интернете я не смог найти решение. Помогите пожалуйста. Класс OrderTime

public class OrderTime : IJob
    {
        AppDBContent appDBContent;
        public OrderTime(AppDBContent appDBContent)
        {
            this.appDBContent = appDBContent;
        }
        public async Task Execute(IJobExecutionContext context)
        {
            var order = appDBContent.Order.FirstOrDefault(e => e.Id == 52);
            if (order != null)
            {
                order.Mail = "admin";
            }
            appDBContent.Order.Update(order);
            appDBContent.SaveChanges();
        }
    }

Класс базы данных AppDBContent

public class AppDBContent : IdentityDbContext<User>
    {
        public AppDBContent(DbContextOptions<AppDBContent> options) : base(options)
        {
            //Database.EnsureCreated();
        }
        public override DbSet<User> Users { get; set; }
        public DbSet<Book> Book { get; set; }
        public DbSet<Сategories> Categories { get; set; }
        public DbSet<BookItems> LibraryBookItem { get; set; }
        public DbSet<Order> Order { get; set; }
        public DbSet<OrderDetail> OrderDetail { get; set; }
    }
Answer 1

Проблему с созданием Job у которой нет дефолтного конструктора, а есть некая зависимость, например на DbContext, можно решить при помощи пакета: Quartz.Extensions.DependencyInjection, если вы используете встроенный контейнер в ASP.NET Core.

В Startup.cs нужно будет добавить, примерно такой код:

services.AddQuartz(q =>
{
    // при помощи этого метода Job резолвится через контейнер,
    // а не создаваться через встроенную фабрику Quartz,
    // которая требует пустой конструктор
    q.UseMicrosoftDependencyInjectionScopedJobFactory();
    q.AddJob<OrderTime>(options =>
    {
        options.WithIdentity("trigger1", "group1")
            .Build();
    });
    q.AddTrigger(options =>
    {
        options.ForJob("trigger1", "group1")
            .StartNow()
            .WithSimpleSchedule(x =>
                x.WithIntervalInSeconds(2)
                    .RepeatForever());
    });
});
services.AddQuartzServer(options =>
{
    options.WaitForJobsToComplete = true;
});

Документация

READ ALSO
Чтение и замена в файле XML на C# [дубликат]

Чтение и замена в файле XML на C# [дубликат]

Понимаю вопрос от слова совсем нетПомогите

105
c# Телеграмм Бот

c# Телеграмм Бот

Доброе время суток, Хотел создать Бота для телеграмма, но подключение к боту не происходитВот сообственно код

122
Visual Studio выдает ошибку

Visual Studio выдает ошибку

Visual Studio выдает ошибку Exception: SystemException: и пишет что ошибка в 1 строке, а на первой строке у меня using System

131
Фантомный клик в datagridview при использовании Quartz.net

Фантомный клик в datagridview при использовании Quartz.net

Есть datagridviewВ последних колонках DataGridViewButtonColumn

120