AddScoped при внедрении зависимостей

#c# #dependency-injection #entity-framework-core

Вопрос:

Я читал, и лучше всего, что я использую AddScoped в своем проекте EF Core, чтобы я мог использовать много контекстов для своих обновлений, поэтому я могу остановить сообщение об ошибке «уже отслежено», когда я выполняю свои изменения сохранения.

Вот мой код для внедрения зависимостей. Просто интересно, как я могу сделать это «AddScoped» вместо Singleton?

Любая помощь была бы замечательной, так как я довольно новичок в этом внедрении зависимостей, EF Core и т.д.

  public override void Configure(IFunctionsHostBuilder builder)
    {
        // CCT database
        builder.Services.AddDbContext<sqldbCCTUKSATPPreProdContext>(
            options =>
            {
                const string ConnString = "SQLConnectionStringCCT";
                options.UseSqlServer(Configuration.GetConnectionString(ConnString)).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
            });
        // CL database (Segimport DB)
        builder.Services.AddDbContext<sqldbCLSegImportUKSATPPreProdContext>(
            options =>
            {
                const string CLConnString = "SQLConnectionStringCL";
                options.UseSqlServer(Configuration.GetConnectionString(CLConnString)).UseQueryTrackingBehavior(QueryTrackingBehavior.TrackAll);
                options.EnableSensitiveDataLogging();

            });
 

Ответ №1:

AddDbContext регистрирует контекст как ограниченный по умолчанию — см. Значение по умолчанию, для contextLifetime которого оно равно ServiceLifetime.Scoped . Ваша проблема с «уже отслеженным» исходит откуда-то еще.

Комментарии:

1. Я бы подумал, что тогда, когда я выполняю SaveChanges, это должно остановить уже отслеживаемую проблему?

2. @Jason_Hough без минимального воспроизводимого примера я не могу много сказать. Я предполагаю, что вы извлекаете объект с помощью своего запроса, а затем пытаетесь добавить другой объект с тем же идентификатором.

3. @Jason_Hough: чтобы мы могли ответить на этот вопрос, вам нужно опубликовать минимальный, воспроизводимый пример.

4. @Jason_Hough и я бы сказал, что это должен быть совершенно новый вопрос =)

5. понятно — я напишу новый вопрос о моей проблеме с отслеживанием.