【问题标题】:AddScoped in dependency injection依赖注入中的 AddScoped
【发布时间】:2021-12-11 19:02:27
【问题描述】:

我一直在阅读,最好在我的 EF Core 项目中使用 AddScoped,这样我就可以使用许多上下文进行更新,这样我就可以在执行 SaveChanges 时停止“已跟踪”错误消息。

这是我的依赖注入代码。只是想知道如何制作这个“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();

            });

【问题讨论】:

    标签: c# dependency-injection entity-framework-core


    【解决方案1】:

    AddDbContext 将上下文注册为默认范围 - 请参阅 contextLifetime 的默认值 ServiceLifetime.Scoped。您的“已跟踪”问题来自其他地方。

    【讨论】:

    • 我会想到,当我执行 SaveChanges 时,它应该停止已经跟踪的问题?
    • @Jason_Hough 没有最小的可重复示例我不能说太多。我的猜测是您正在使用查询获取一个实体,然后尝试添加另一个具有相同 ID 的实体。
    • @Jason_Hough:为了让我们回答这个问题,您需要发布一个最小的、可重现的示例。
    • @Jason_Hough 我认为这应该是一个全新的问题 =)
    • 明白了 - 我会写一个关于我的跟踪问题的新问题。
    猜你喜欢
    • 2019-12-19
    • 1970-01-01
    • 2021-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-08
    • 2014-06-12
    相关资源
    最近更新 更多